【问题标题】:Mass Assignment Issue Rails 3批量分配问题 Rails 3
【发布时间】:2013-07-26 04:46:24
【问题描述】:

我已经在 SO 上搜索了这个答案,但没有找到。我收到此错误:无法批量分配受保护的属性:品牌、详细信息、产品、代码

我正在将文件中的 csv 数据上传到我的 rails db。这是上传页面控制器的导入操作:

def import
     Item.import(params[:file])
     redirect_to root_url, notice: "Products imported."
end

Item 模型中的 attr_accessible 行:

attr_accessible :brand, :details, :img, :product, :code

我正在使用 Devise,不确定这是否是问题的一部分?我需要在我的用户模型中做些什么来完成这项工作吗?提前致谢。

这是来自 Item 的 self.import 方法:

  def self.import(file)
CSV.foreach(file.path, headers: true) do |row|
    Item.create! row.to_hash
   end
  end

【问题讨论】:

  • Item#import 方法在这里很重要。可以发一下出处吗?
  • 顺便说一句:您可能需要考虑strong parameters gem
  • 贴出导入方法,感谢强参数提示。到目前为止它正在工作。

标签: ruby-on-rails ruby mass-assignment


【解决方案1】:

这是关于一般调试的提示 — 出于好奇,您也可以看看 params 是什么,或者使用 pry

def import
  raise StandardError, params.inspect
end

我还建议您使用强参数,我在我的博客上详细介绍了一种干净的方法,您可能会发现它很有用:Bootstrapping Strong Parameters in Rails

【讨论】:

  • 关于找出参数中的内容的好技巧。我使用强参数解决了批量分配问题,但现在我在尝试上传时收到此消息....“缺少必需的参数:项目。”我假设这意味着我的表中有一些参数与我的 csv 列标题不匹配。我怀疑我的表有时间戳,根本没有在 csv 文件中引用。我似乎无法获得 StandardError 来显示参数。
  • 忽略我最后的评论,我想我已经解决了。
猜你喜欢
  • 2013-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-29
  • 2012-08-17
  • 1970-01-01
  • 1970-01-01
  • 2012-04-01
相关资源
最近更新 更多