Hi,
I am following the excellent tutorial
http://www.railsforum.com/viewtopic.php?id=14216
(post 5) on how to implement an access control feature i.e. only a
friend is allowed to view a profile of a particular member. I am not
using the restful authentication plugin as the author is using to
implement the authentication feature (post 1) in the tutorial. All I
am interested in is the post 5 where the author explains how to
implement access control. I have created the friends table and
followed post 5 step by step, unfortunately I am getting the following
error when I try to attempt to run the "show" method. Some tips will
really be helpful, many thanks in advance
error: stack level too deep
usr/lib/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/
reflection.rb:219:in `derive_class_name''
/usr/lib/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/
reflection.rb:106:in `class_name''
/usr/lib/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/
reflection.rb:129:in `klass''
/usr/lib/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/
reflection.rb:189:in `source_reflection''
/usr/lib/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/
reflection.rb:189:in `collect''
/usr/lib/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/
reflection.rb:189:in `source_reflection''
...
/usr/lib/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/
associations.rb:1128:in `new''
/usr/lib/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/
associations.rb:1128:in `pals''
app/models/user.rb:17:in `has_pal?''
app/controllers/users_controller.rb:20:in `show''
/models/user.rb
line 16: def has_pal?(pal)
line 17: self.pals.find(pal) ? true : false
Line 18: end
/controllers/users_controller.rb
Line 18: def show
Line 19: @info = User.find(params[:id])
Line 20: unless current_user.has_pal?(@info)
Line 21: redirect_to :controller => "users", :action =>
"index"
Line 22: end
Line 23: end
here is the full contents of the user model
require ''digest/sha1''
class User < ActiveRecord::Base
has_many :pals
has_many :pals, :through => :pals
# attr_accessor :password
validates_presence_of :username
validates_presence_of :password
validates_presence_of :password_confirmation
validates_length_of :password, :within => 4..40
validates_confirmation_of :password
validates_length_of :username, :within => 3..40
validates_length_of :email, :within => 3..100
validates_uniqueness_of :username, :email, :case_sensitive =>
false
def has_pal?(pal)
# self.pals.find(pal) ? true : false
end
#validate
# errors.add_to_base("No password") if crypted_password.blank?
# end
# Authenticates a user by their username name and unencrypted
password. Returns the user or nil.
def self.authenticate(username, crypted_password)
login = find_by_username(username) # need to get the salt
if login
expected_password = encrypted_password(crypted_password,
login.salt)
if login.crypted_password != expected_password
login = nil
end
end
login
end
def password
@password
end
def password=(pw)
@password = pw
create_new_salt
self.crypted_password = User.encrypted_password(self.password,
self.salt)
end
def remember_token?
remember_token_expires_at && Time.now.utc <
remember_token_expires_at
end
# These create and unset the fields required for remembering users
between browser closes
def remember_me
self.remember_token_expires_at = 2.weeks.from_now.utc
self.remember_token = encrypt("#{email}--
#{remember_token_expires_at}")
save(false)
end
def forget_me
self.remember_token_expires_at = nil
self.remember_token = nil
save(false)
end
private
# before filter
def self.encrypted_password(password, salt)
string_to_hash = "#{password}wibble"+ salt
Digest::SHA1.hexdigest(string_to_hash)
end
def create_new_salt
self.salt = self.object_id.to_s + rand.to_s
end
end
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---