use*_*621 5 ruby ruby-on-rails ruby-on-rails-4
我有一个文本文件,其中包含需要存储在数据库中的数据。
\n\n在 Rails 控制器操作中,我有这样的内容:
\n\nclass ImportDataController < ApplicationController\n  protect_from_forgery except: :abc_client\n\n  def abc_client\n    ...simplified code:...\n    ...loading data from a file...\n    car = {}\n    car[:attr1] = something\n    car[:attr2] = something\n    car[:attr3] = something\n    ...and so on...\n\n    ...now I try to save the record to the DB...\n    @car = Cars::Crud::CreateService.new(car).create\n  end\nend\n我收到此错误:
\n\nprivate method `require\' called for #<Hash:0x007fb2e2ef6040>\n以及该代码块上的错误点:
\n\ndef car_params(params)\n  params.require(:car).permit(:attr1, :attr2, ...)\n我还尝试通过 Rails 表单“正常”创建一条记录,并从控制台复制哈希值并尝试保存它,例如:
\n\nparams = {"utf8"=>"\xe2\x9c\x93", "authenticity_token"=>"kXMd23s4msX2OzhUAX2CWqyphnpCPNorQOvoitatj8uBsQBgGYbTgfoR1wTTWlufo++esyb5m9ogBfSHbCrAPA==", "car"=>{"attr1"=>"6", ...\n\n@car = Cars::Crud::CreateService.new(params).create\n但它导致了相同的错误消息。
\n\n我该如何弄清楚?
\n\n谢谢
\n小智 8
在不知道在哪里定义的情况下很难回答car_params,但我可以肯定地告诉你,问题是params你传递的它是一个普通的 RubyHash而不是 Rails ActionController::Parameters,这是在哪里#require定义的。
您可以不使用强参数,并将其替换为fetch和slice,如下所示:
params.fetch(:car).slice(:attr1, :attr2, ...) 
或者,如果您确实想使用强参数,您可以像这样包装您的哈希:
ActionController::Parameters.new(some_ruby_hash)
然后你就可以打电话#require了#permit。
| 归档时间: | 
 | 
| 查看次数: | 2453 次 | 
| 最近记录: |