编写嵌套表单时遇到了问题。
我收到了以下错误:
TypeError (no implicit conversion of Symbol into Integer):
app/controllers/people_controller.rb:9:in `create'
参数白名单:
def person_params
params.require(:person).permit(
:id, :name, :role, :dob,
:work_place, :assessment_id,
:telephone, :occupation,
person_notes_attributes: [
:id, :is_referee, :is_requester,
:is_key_holder, :is_house_member, :is_present,
:is_visitor, :presence_explanation, :visitor_info
] )
end
典型的表单元素:
<%= check_box_tag "person[person_notes_attributes][is_referee]", "true", false %>
<%= label_tag "person[person_notes_attributes][is_referee]", 'Requested referral?' %>
经过一番搜索,我认为我已经回归blog post中描述的问题的本质。
作者指出此错误是由rails如何解释params散列的索引引起的。
他注意到:
Rails期望params [:user] [:keys_attributes]使用整数作为键(就像数组一样),但它找到了符号。
在我的情况下,这将是
params[:person][:person_notes_attributes].
作者与我的案例之间的区别在于他们正在POST
json
个数据并提供默认参数。
他们的解决方案是通过将hash
包裹在array element
中来修复他们提供的声明默认参数。
我已尝试过他们的解决方案,虽然它可以让我成功保存PersonNote
的记录,但form inputs
不会覆盖提供的默认值。
我该如何解决这个问题?
理想情况下,我想要一个不需要声明默认值的解决方案。