Ruby on Rails 4 - 表示不更新其他字段

时间:2014-12-24 11:27:06

标签: ruby-on-rails

我有配方设置为

的配方和配料模型
Recipe has_many :ingredients
accepts_nested_attributes_for :ingredients, :reject_if => :all_blank, :allow_destroy => true

Ingredient belongs_to :recipe

和recipes_controller中定义的强参数

def recipe_params
  params.require(:recipe).permit(:title, :image, :serving, :prep, :cook, :steps, ingredients_attributes: [:id, :name, :_destroy])
end

并且提交的表单发送以下参数

Request

Parameters:

{"utf8"=>"✓",
 "_method"=>"patch",
 "authenticity_token"=>"zT+9YEIh6ZNxO3wrV8ajj8NyVaTfPDel171hasWk2DA=",
 "recipe"=>{"title"=>"Recipe with image",
 "serving"=>"3",
 "prep"=>"10 min ",
 "cook"=>"19 min"},
 "ingredient"=>{"name"=>["Chicken", "Beef"]},
 "commit"=>"Update Recipe",
 "id"=>"4"}

问题是额外的成分Beef不会在数据库中持久存在。 我想知道我是否也必须传递recipe_params中定义的ingredient_id哈希,或者我需要在参数中使用某种参考来与配方相关联。

这个附加字段是使用脚本生成的,我并不认为在提交表单后这个值会丢失,因为它在请求参数中显示。

我很感激您的意见。

1 个答案:

答案 0 :(得分:2)

在视图中创建表单时使用fields_for? 你发布的包含成分,但应该包含ingredients_attributes

关注http://railscasts.com/episodes/196-nested-model-form-part-1