我找不到能引导正确方向的东西。其他所有与嵌套资源类似的问题似乎都在accepts_nested_attributes_for
左右解决......我不想这样做。我不是想拯救父母的孩子,我正试图直接从孩子身上拯救。
在我的routes.rb中,我嵌套了我的资源
resources :parents, param: :parent do
resources :children, param: :child
end
parent
和child
表都有自己的id
列,但也分别在列parent
和child
上有唯一索引,我是用于URL而不是id
。
这可以很好地浏览每个控制器的show
,edit
和index
操作。
问题是保存数据有例外。
我希望问题的根本原因不会归结为child
表中的字段,也称为child
,因为这是我用来覆盖的{{1}在模型中,需要保持这种方式。
导航到编辑屏幕:http://example.com/parents/harry/children/sally/edit并在表单上按提交,返回此 NoMethodError 例外:
/ parents / harry / children / sally的NoMethodError 未定义的方法`permit'for“sally”:String
我确定问题与我的强参数行在to_param
中的方式有关。我可以向children_controller.rb
添加require
和:parent
的哈希吗?
:child
更新1(已添加参数):以下是请求参数:
def children_params
params.require(:child).permit(:child, :date_of_birth, :nickname)
end
错误时的其他实例变量范围:
@parent
{
"utf8"=>"✓",
"_method"=>"patch",
"authenticity_token"=>"fAkBvy1pboi8TvwYh8sPDJ6n2wynbHexm/MidHruYos7AqwlKO/09kvBGyWAwbe+sy7+PFAIqKwPouIaE34usg==",
"child"=>"sally",
"commit"=>"Update Child",
"controller"=>"children",
"action"=>"update",
"parent_parent"=>"harry"
}
@child
<Parent id: 1, parent: "harry", description: "", user_id: 1, created_at: "2015-06-27 12:00:15", updated_at: "2015-06-27 12:00:15">
答案 0 :(得分:1)
从 params ,您需要更改children_params
,如下所示
def children_params
params.permit(:child, :date_of_birth, :nickname)
end
答案 1 :(得分:0)
事实证明,问题确实似乎是因为模型属性在模型中被命名为相同,这也是params散列也被称为(真正的问题似乎在于)
我需要做的就是重命名params hash。
在children_controller.rb
,我不得不改变:
def children_params
params.require(:child).permit(:child, :date_of_birth, :nickname)
end
为...
def children_params
params.require(:anything_else).permit(:child, :date_of_birth, :nickname)
end
然后还从以下位置更改新/编辑视图中的form_for
表单:
<%= simple_form_for([@parent, @child]) do |f| %>
为...
<%= simple_form_for([@parent, @child], as: :child_params) do |f| %>
现在,在两个测试中以及用户通过用户界面正常使用网站时,所有方法都能全面运作。