1

我有以下课程:

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而不是复制它,但请假设,我真的需要在这里拥有它。

谢谢您的回答。

4

1 回答 1

0

两件事情:

  1. 你能有一个没有用户的列表吗?如果是,则该回调将失败,您需要检查用户是否存在。
  2. list language_id 是否总是与 user.language_id 相同?如果是,我建议将 language_id 和语言委托给用户,delegate :language, :language_id, :to => :user您可以查看http://apidock.com/rails/Module/delegate以了解委托的工作方式和更多选项。
于 2013-01-25T17:00:50.957 回答