0

いくつかのオブジェクト、foo、bar、および user があります。

simple_fields_for と accept_nested_attributes_for を使用して新しい子バー オブジェクトを同時に作成する、新しい foo オブジェクトを作成するためのフォームがあります。

現在、新しいバーの作成者属性として current_user を設定したいのですが、これを行う最善の方法がわかりません。(Rails はまだ初めてです。)

foo コントローラー内の create メソッドで次のことを試しました。

def create
    @foo = Foo.build(params[:foo])

    @foo.bars.find(:first).author = current_user

ただし、これを実行すると例外が発生します。

undefined method `author=' for nil:NilClass

これについて最善の方法についてアドバイスを提供できる人はいますか?

4

1 に答える 1

0

Barの下にオブジェクトを構築する必要がある可能性があります@foo。すなわち

def new
  @foo = Foo.new
  @foo.bars.build
end

def create
   @foo = Foo.new(params[:foo])
   @foo.bars.first.author = current_user
   if @foo.save 
     redirect_to @foo
   else
     render action: "new"
   end
end

ネストされたフォームの優れたリソース: http://railscasts.com/episodes/196-nested-model-form-part-1?view=asciicast

モデルでaccepts_nested_attributes_forを設定fields_forし、フォームで正しく使用すると、バーオブジェクトについてフォームに入力されたデータを含むparams[:foo]要素が呼び出されます。bar_attributes詳細については、リンク先のレールキャストをご覧ください。

于 2012-11-16T16:41:48.067 に答える