Carlos A. Cabrera
2010-Jul-22 23:51 UTC
[Rails] Validating user’s ability using CanCan with model associations
I have a TakeAction model that looks like this: class TakeAction < ActiveRecord::Base belongs_to :user has_many :take_action_notes attr_protected :user_id end and a TakeActionNote model that looks like this: class TakeActionNote < ActiveRecord::Base belongs_to :take_action validates_presence_of :note end Using CanCan, I''m trying to allow the user that owns the take_action to create and destroy (manage) notes. I''ve tried defining abilities with a block like this. can :manage, TakeActionNote do |action, note| note.take_action.user.id == user.id end I can add notes to the take_action without any problem but when I try to destroy it I get: NoMethodError in Take action notesController#33 undefined method `take_action'' for nil:NilClass Is there anything I''m missing or doing wrong? Any help is appreciated. Thanks! -- 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Dave Aronson
2010-Jul-23 12:12 UTC
Re: [Rails] Validating user’s ability using CanCan with model associations
On Thu, Jul 22, 2010 at 19:51, Carlos A. Cabrera <carlos-x6sHsmbquPczbzzl3JCKVQ@public.gmane.org> wrote:> can :manage, TakeActionNote do |action, note| > note.take_action.user.id == user.id > end > I can add notes to the take_action without any problem but when I try > to destroy it I get: > > NoMethodError in Take action notesController#33 undefined method > `take_action'' for nil:NilClassUndefined methods on nil:NilClass mean that you''re expecting something to be an object, but it''s really nil. With something this short, it''s probably not so much *this* code, as whatever call it (or causes it to be called, whatever). If you don''t know what calls it, perhaps you can insert something that would look for a nil value and dump the call stack in that case. (Sorry I can''t be more specific, as I don''t know CanCan myself; this is just a general code troubleshooting technique.) -Dave -- Specialization is for insects. | Professional: http://davearonson.com -Robert Anson Heinlein | Programming: http://codosaur.us -------------------------------+ Leadership: http://dare2xl.com Have Pun, Will Babble! -me | Et Cetera: http://davearonson.net -- 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.