我正在尝试更新多条记录。表单生成罚款并提交罚款并发送数据。查找记录以进行更新,但不会保存任何数据。下面有我的 Controller 逻辑、表单逻辑和控制台转储。我试图复制安东尼·刘易斯 put together 的内容但我有一种感觉,我没有将正确的数据传递到 params.require().permit() 方法或正确定义 params.require().permit() 方法。预先感谢您的帮助!
class ConfigController < ApplicationController
def edit
@services = Service.all
end
def update
params["service"].keys.each do |id|
@service = Service.find(id.to_i)
@service.update_attributes!(service_params)
end
redirect_to config_url
end
private
def service_params
params.require(:service).permit(:id, :client_id, :client_secret)
end
end
表单代码为:
<%= form_for :service, :url => update_config_path, :html => { :class => "form-horizontal", :method => "put", :remote => true } do %>
<% @services.each do |s| %>
<%= fields_for "service[]", s do |service_field| %>
<fieldset>
<legend><%= s.name %></legend>
<div class="form-group">
<%= service_field.label :client_id, "Consumer Key", :class => "col-sm-2 control-label" %>
<div class="col-sm-10">
<%= service_field.text_field :client_id, :class => "form-control" %>
</div>
</div>
<div class="form-group">
<%= service_field.label :client_secret, "Consumer Secret", :class => "col-sm-2 control-label" %>
<div class="col-sm-10">
<%= service_field.text_field :client_secret, :class => "form-control" %>
</div>
</div>
</fieldset>
<% end %>
<% end %>
<%= submit_tag %>
<% end %>
控制台读取:
Started PUT "/config" for 127.0.0.1 at 2013-11-22 15:44:08 -0800
Processing by ConfigController#update as JS
Parameters: {"utf8"=>"✓", "service"=>{"1"=>{"client_id"=>"testid", "client_secret"=>"testsecret"}, "2"=>{"client_id"=>"testkey", "client_secret"=>""}, "3"=>{"client_id"=>"", "client_secret"=>""}}, "commit"=>"Save changes"}
Service Load (0.3ms) SELECT "services".* FROM "services" WHERE "services"."id" = $1 LIMIT 1 [["id", 1]]
Unpermitted parameters: 1, 2, 3
(0.1ms) BEGIN
(0.1ms) COMMIT
Unpermitted parameters: 1, 2, 3
{}
Service Load (0.2ms) SELECT "services".* FROM "services" WHERE "services"."id" = $1 LIMIT 1 [["id", 2]]
Unpermitted parameters: 1, 2, 3
(0.1ms) BEGIN
(0.1ms) COMMIT
Unpermitted parameters: 1, 2, 3
{}
Service Load (0.2ms) SELECT "services".* FROM "services" WHERE "services"."id" = $1 LIMIT 1 [["id", 3]]
Unpermitted parameters: 1, 2, 3
(0.1ms) BEGIN
(0.1ms) COMMIT
Unpermitted parameters: 1, 2, 3
{}
Redirected to http://localhost:3000/config
Completed 302 Found in 6ms (ActiveRecord: 1.1ms)
最佳答案
我找到了一个解决方案,但也许不是最好的。如果有人有更好的想法,请告诉我,我很乐意尝试!
在解决方案中,我更新了 Controller update
操作和 service_params
。
我将 id
传递给 service_params
并在 require
方法上调用 fetch
方法来获取正确的参数。我注意到在控制台中,它在保存每条记录时读取了 Unpermissed parameters: 1, 2, 3
,指示参数是一个数组,我还注意到在 @Vijay 的解决方案中,他试图缩小参数范围以及。经过一些谷歌搜索和控制台日志记录后,我想出了下面的代码。
def update
params["service"].keys.each do |id|
@service = Service.find(id.to_i)
@service.update_attributes!(service_params(id))
end
redirect_to config_url
end
def service_params(id)
params.require(:service).fetch(id).permit( :client_id, :client_secret )
end
你觉得怎么样?
关于ruby-on-rails - 在 ruby 中使用 params.require 保存多条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20156664/