【问题标题】:undefined method `permit' for "**output omitted**":String“**输出省略**”的未定义方法`permit':字符串
【发布时间】:2015-12-31 03:23:54
【问题描述】:

更新: 我有一个 link_to 设置用于删除作为嵌套资源的对象。在销毁之前,我有一个方法可以根据 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。你能把那个方法的内容贴在这里吗?
  • @tolgap 用object_params更新了问题
  • 首先,现在您使用当前的link_to 构造将&lt;a&gt; 标签包裹在&lt;button&gt; 标签周围。这里的content_tag(:button) 是什么?您可以简单地将该按钮的类分配给link_to
  • 有些东西无法计算。带有该代码的params 的内容无法产生该输出。
  • 这里"id"=&gt;"5-bbdb-b8ac9"是字符串,但是id在数据库中定义为int,所以把代码改成:id =&gt; focus.id.to_i

标签: ruby-on-rails ruby-on-rails-4 link-to destroy nested-resources


【解决方案1】:

在我看来,您正在尝试使用普通哈希来构建一个需要强参数的对象。

使用

@object = Object.where(object_params).first

而不是试图将它们推入构建方法中的哈希中

编辑

您的链接似乎也需要更新:

parent_object_path(set_list: {id: ..., etc})

因为你的代码说它需要 set_list 对象。

** 之前的编辑有误,抱歉**

【讨论】:

  • 这仍然返回相同的错误,可能是因为它仍在寻找object_params?另外,它是否有可能正在寻找一个对象,但我给它一个字符串?
【解决方案2】:

您的object_params 方法需要有一个名为set_list 的参数。你的params中没有这个参数。

这对你有用:

def set_object
  binding.pry
  @object = Object.where(object_id: params[:id]).first
end

您不需要通过 permit 包装 params[:id] 查找,因为您没有批量分配任何内容。

【讨论】:

  • 我试过了,它创建了实例,但仍然设法点击 object_params 并出错。
  • 我被骗了!我重新启动了我的服务器,它就像一个魅力!非常感谢:) 另外出于好奇,如果我要维护object_params,是否会在参数中包含set_list 以不同的方式解决它?
  • 是的,但是对于选择查询,您绝对不需要像 object_params 这样的东西。如果您要执行Object.new object_params 之类的操作,您只需要允许属性,这样您就可以控制属性,并且用户不能设置任何有害属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-29
相关资源
最近更新 更多