2012-05-02 15 views
0

をcurrent_user.id私は、フォームの異なる部分は、私が取得する方法を必要とするさまざまなユーザーによって追加して更新することができますので、以下のキャプチャは、深くネストされたレコードを保存

=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を保存する前に各モデルに追加します。私はそれがmvcに準拠していないことを認識してcurrent_userモデルにアクセスすることができます。

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

これを処理するエキスパート/レイジーの方法はありますか?

のRails 3.2、工夫

答えて

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キーでマージする必要があります。ネストされたヘルパーはデフォルトでこれを行いません。したがって、あなたがそれを使用している場合は、それをassignメソッドに任せることができます。

関連する問題