已更新:我设置了一个链接,用于删除嵌套资源的对象。在销毁之前,我有一个方法,它基于object_params检查该对象的实例,但当它试图引用object_params
时,发送的参数会不断引发undefined method 'permit' for "asdfsadf":String
。
按钮:
<%= link_to content_tag('button', '', class: 'btn fa fa-trash-o focus-delete-button'), parent_object_path( :parent_id => focus.z_kf_parent, :id => focus.id, :object => focus), data: {confirm: "Are you sure you want to delete '#{focus.name}'"}, method: :delete %>
参数:
{"_method"=>"delete",
"authenticity_token"=>"gmlVYHy230Y1lQY=",
"object"=>"6c1367b1-1d63-4545-bbdb-b8ac9bd39422",
"action"=>"destroy",
"controller"=>"objects",
"parent_id"=>"FA100073-4A0C-4EE0-8FB1-3EC39C61AD39",
"id"=>"5-bbdb-b8ac9"}
object_params:
def object_params
params.require(:set_list).permit(:id, :photographer, :digital_tech, :photo_production, :stylist, :stylist_assistant, :hair_makeup, :photographer_assistant, :name, :t_start, :t_finish, :z_kf_parent)
end
方法:
def set_object
binding.pry
@object = Object.(object_id: object_params[:id]).first
end
我没有在link_to
中正确设置参数吗?
您的object_params
方法需要有一个名为set_list
的参数。您的params
中没有这样的参数。
这将为您工作:
def set_object
binding.pry
@object = Object.where(object_id: params[:id]).first
end
您不需要通过permit
包装params[:id]
查找,因为您没有批量分配任何内容。
在我看来,您正试图使用普通哈希来构建一个需要强参数的对象。
使用
@object = Object.where(object_params).first
而不是试图在构建方法中将它们推送到散列中
编辑
它还显示您的链接需要更新:
parent_object_path(set_list: {id: ..., etc})
因为您的代码说它需要setlist对象。
**以前的编辑不正确,抱歉**