我有以下课程:
class User < ActiveRecord::Base
attr_accessible :language_id
has_many :lists
end
class List < ActiveRecord::Base
attr_accessible :language_id
belongs_to :user
end
我想自动将用户的language_id分配给新创建的列表:
# list.language_id should be equal to user.language_id
list = user.lists.create
我发现最干净的解决方案是在List类中添加一个过滤器:
before_validation :assign_language_id, on: :create
def assign_language_id
self.language_id = self.user.language_id
end
这似乎不是一个糟糕的解决方案,但我想知道Rails是否有一些神奇的处理方式。
我知道我总是可以要求list.user.language_id
而不是复制它,但请假设我真的需要在这里。
感谢您的回答。
答案 0 :(得分:0)
两件事:
delegate :language, :language_id, :to => :user
将language_id和语言委托给用户,您可以查看http://apidock.com/rails/Module/delegate以了解委托的工作方式以及更多选项。