0

次のような作業フォームがあるとしましょう

=form_for @survey do |f|
  =f.text_field :name
  =f.fields_for :questions do |question_fields|
    =question_fields.text_field :question_text
      =question_fields.fields_for :answers do |answer_fields|
        =answer_fields.text_field :answer_text

フォームのさまざまな部分をさまざまなユーザーが追加および更新できるため、保存する前にuser_idを各モデルに取り込む方法が必要です。モデル内のcurrent_userにアクセスできるようにすることは、MVCに準拠していないことを認識しています。それは、解決策がないままになっていると言われています。

1つのオブジェクトのみを保存する場合、コントローラーのオブジェクトにcurrent_user.idを割り当てるのは簡単ですが、このフォームの深くネストされた性質を考えると、醜い解決策のように見え始めます。

これを処理するための専門家/手ごわい方法はありますか?

Rails 3.2、考案

4

1 に答える 1

1

オブジェクトのそれぞれが単にuser_id「親」関係から盗むことはできませんか? これは一般的なパターンです:

class Answer < ActiveRecord::Base
  before_validation :assign_user_id

protected
  def assign_user_id
    # Don't attempt if the question is not defined,
    # or the user_id field is already populated.
    return unless (self.question or self.user)

    self.user_id = self.question.user_id
  end
end

これには、各質問の回答を解決するための追加のデータベース アクティビティが少し含まれます。これは、スコープ内で回答を作成するだけでは十分ではありませんが、非常に簡単に作成できます。

おそらくやりたいことは、user_id各レコードを作成するときにパラメーターに入れることです。これは、必要に応じて呼び出しをキーcreateにマージする必要があることを意味します。:user_idただし、ネストされたヘルパーはデフォルトではこれを行わないため、それを使用している場合は、割り当てメソッドに任せることができます。

于 2012-05-02T19:04:20.900 に答える