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\nRun Code Online (Sandbox Code Playgroud)\n\n我收到此错误:
\n\nprivate method `require\' called for #<Hash:0x007fb2e2ef6040>\nRun Code Online (Sandbox Code Playgroud)\n\n以及该代码块上的错误点:
\n\ndef car_params(params)\n params.require(:car).permit(:attr1, :attr2, ...)\nRun Code Online (Sandbox Code Playgroud)\n\n我还尝试通过 Rails 表单“正常”创建一条记录,并从控制台复制哈希值并尝试保存它,例如:
\n\nparams = {"utf8"=>"\xe2\x9c\x93", "authenticity_token"=>"kXMd23s4msX2OzhUAX2CWqyphnpCPNorQOvoitatj8uBsQBgGYbTgfoR1wTTWlufo++esyb5m9ogBfSHbCrAPA==", "car"=>{"attr1"=>"6", ...\n\n@car = Cars::Crud::CreateService.new(params).create\nRun Code Online (Sandbox Code Playgroud)\n\n但它导致了相同的错误消息。
\n\n我该如何弄清楚?
\n\n谢谢
\n小智 8
在不知道在哪里定义的情况下很难回答car_params,但我可以肯定地告诉你,问题是params你传递的它是一个普通的 RubyHash而不是 Rails ActionController::Parameters,这是在哪里#require定义的。
您可以不使用强参数,并将其替换为fetch和slice,如下所示:
params.fetch(:car).slice(:attr1, :attr2, ...)
Run Code Online (Sandbox Code Playgroud)
或者,如果您确实想使用强参数,您可以像这样包装您的哈希:
ActionController::Parameters.new(some_ruby_hash)
Run Code Online (Sandbox Code Playgroud)
然后你就可以打电话#require了#permit。
| 归档时间: |
|
| 查看次数: |
2453 次 |
| 最近记录: |