before_destroy определение NoMethodError
Эй, у меня небольшие проблемы с этой функцией
class User < ActiveRecord::Base
belongs_to :group
end
class Group < ActiveRecord::Base
has_many :users
attr_accessible :name
validates_presence_of :name
before_destroy :set_default_group
private
def set_default_group
self.users.each do |u|
puts u # prints out <User:0x007fd678a85cb8>
u.group = self.first
u.save
end
end
end
это дает мне эту ошибку NoMethodError: неопределенный метод `group'для #Group id: 18, так что не так с моим определением?
сообщение об ошибке
NoMethodError: undefined method `group' for #<Group id: 18>
from /Users/.../.rvm/gems/ruby-1.9.3-p194/gems/activemodel-3.2.8/lib/active_model/attribute_methods.rb:407:in `method_missing'
from /Users/.../.rvm/gems/ruby-1.9.3-p194/gems/activerecord-3.2.8/lib/active_record/attribute_methods.rb:149:in `method_missing'
from /Users/.../Developer/rails/.../app/models/group.rb:12:in `block in set_default_group'
from /Users/.../.rvm/gems/ruby-1.9.3-p194/gems/activerecord-3.2.8/lib/active_record/associations/collection_proxy.rb:89:in `each'
from /Users/.../.rvm/gems/ruby-1.9.3-p194/gems/activerecord-3.2.8/lib/active_record/associations/collection_proxy.rb:89:in `method_missing'
from /Users/.../Developer/rails/.../app/models/group.rb:10:in `set_default_group'
1 ответ
Решение
Ваша ошибка не имеет смысла, так как вы вызываете #group для пользователя, а не для группы.
Тем не менее, я считаю, что
u.group = self.first
не будет работать так, как вы намереваетесь, поскольку #first является методом класса, а self здесь является экземпляром. Пытаться:
u.group = self.class.first
или просто:
u.group = Group.first