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

2つのこと:

  1. ユーザーなしでリストを作成できますか?はいの場合、そのコールバックは失敗します。ユーザーが存在するかどうかを確認する必要があります。
  2. リスト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 に答える