1. ホーム
  2. ruby-on-rails

[解決済み] アソシエーションを介して所属_to

2022-04-25 01:05:21

質問

次のような関連付けがある場合、私は、その参照先として Question その Choice から通して添付されます。 Choice モデルを使用します。を使おうとしているのですが belongs_to :question, through: :answer を使用してこのアクションを実行します。

class User
  has_many :questions
  has_many :choices
end

class Question
  belongs_to :user
  has_many :answers
  has_one :choice, :through => :answer
end

class Answer
  belongs_to :question
end

class Choice
  belongs_to :user
  belongs_to :answer
  belongs_to :question, :through => :answer

  validates_uniqueness_of :answer_id, :scope => [ :question_id, :user_id ]
end

私は

NameError 未初期化の定数 User::Choice

をしようとすると current_user.choices

を含めない場合は、問題なく動作します。

belongs_to :question, :through => :answer

しかし、それを利用したいのは validates_uniqueness_of

私はおそらく何か簡単なことを見落としているのでしょう。何か助けがあればありがたいのですが。

解決方法は?

A belongs_to アソシエーションは :through オプションを使用します。をキャッシュする方がよいでしょう。 question_idChoice を作成し、テーブルにユニークなインデックスを追加します(特に validates_uniqueness_of はレースコンディションが発生しやすい)。

もしあなたが偏執狂なら、カスタムバリデーションを Choice を確認し、その答えが question_id しかし、エンドユーザーがこのようなミスマッチを起こすようなデータを送信する機会を与えてはいけないような気がします。