0

私はそれを持ってUserhas_many :recipesます。をsimple_form使用しており、フォームを使用して新しいレシピを作成しようとしています。シンプルですね。私は1ダースのSOの質問に目を通し、すべてを含むすべての落とし穴を修正したと思いましたaccepts_nested_attributes_for

現在、フォームを送信して新しいレシピを作成すると、ユーザーに関するエラーが表示されたユーザー編集フォームにリダイレクトされます。関連するコードは次のとおりです。

class User < ActiveRecord::Base
  ...
  attr_accessible ..., :recipes_attributes

  has_many :recipes
  accepts_nested_attributes_for :recipes
end


class Recipe < ActiveRecord::Base
  ...
  belongs_to :user

end

recipes/new.html.haml

= simple_nested_form_for @user do |f|

  = f.simple_fields_for :recipes, @user.recipes do |rf|
    = rf.input :name
    = rf.input :source
    = rf.input :link
    = rf.input :season, collection: %w(spring summer fall winter), prompt: 'Choose season', required: false
    = rf.input :protein, as: :radio_buttons, required: false
    = rf.input :course, collection: ['appeteizer', 'soup', 'dessert', 'entrée', 'side', 'salad'], prompt: 'Choose course', required: false
    = rf.input :featured, as: :boolean, required: false
    = rf.input :directions, as: :text
    .actions
      = f.submit 'Save'
      or
      = link_to 'Cancel', user_recipes_path(@user)

私も試しました = f.simple_fields_for :recipe do |rf|

newで、その方法がこちらRecipesController

  def new
    @user = User.find(params[:user_id])
    @recipe = @user.recipes.build || @recipe.new

    respond_to do |format|
      format.html
      format.json { render json: @recipe }
    end
  end

レシピコントローラーではなく、ユーザーコントローラーに投稿しようとしているようです。これが、ユーザーの編集にリダイレクトされる理由を説明しています。put リクエストのログは次のとおりです。

Started PUT "/users/4" for 127.0.0.1 at 2013-05-19 22:31:07 -0700
Processing by UsersController#update as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"QmCo025nqR9vJt49To1gQ7/edv4MSlvuwHYotEihI2E=", "user"=>{"recipes_attributes"=>{"0"=>{"name"=>"dffd", "source"=>"dfswer", "link"=>"ewrre", "season"=>"", "course"=>"", "featured"=>"0", "directions"=>"werew"}}}, "commit"=>"Save", "id"=>"4"}

技術的には であることは知っていますが、レシピを作成しているので、新しいレシピを作成するform_for @userにはどうすればよいですか? recipesそして、私はそれを置きたいですかrecipes_attributes、それともrecipe_attributes?これは新しいレシピ用であり、レシピまたはレシピのネストされた属性を受け入れるようにしようとしました(それに応じてフォームを一致させました)。私もそれについて混乱していると思います。

4

1 に答える 1

0

User のフォームを作成しましたsimple_nested_form_for @user。これが、フォームが users_controller に送信される理由です。

フォームにユーザー関連のフィールドがない場合は、レシピ用のフォームを作成します

form_for([@user, @recipe]) do
于 2013-05-20T05:44:47.303 に答える