我有一个具有bw_positions属性的焊接证书模型。我希望能够通过复选框选择焊接位置
<%= check_box_tag "bw_positions[]", "PA" %>PA
<%= check_box_tag "bw_positions[]", "PB" %>PB
<%= check_box_tag "bw_positions[]", "PC" %>PC
并将它们存储为字符串,例如"字符串";PA、PC";或";PA、PB、PC";。
发送到控制器的参数看起来不错:
#<ActionController::Parameters {"_method"=>"patch", "authenticity_token"=>"NSQ9FlN3hqaLbgCkVkDKHgsLOdTp20hkDpXtwqh7ZgiWOB04H0qg6s9_mpyTk03SdFGHRH4paVkA7ZiXvaoCNQ", "welding_certificate"=>{"code"=>"PN EN ISO 9606-1", "number"=>"1234", "material_group"=>"FM5, FM4", "methods"=>"141", "bw"=>"1", "fw"=>"0", "diameter_min"=>"1", "diameter_maks"=>"2", "thk_min"=>"1", "thk_maks"=>"2", "valid_since"=>"2021-04-06", "valid_until"=>"2021-04-28"}, **"bw_positions"=>["PA", "PB"]**, "commit"=>"Zatwierdź", "controller"=>"welding_certificates", "action"=>"update", "welder_id"=>"1", "id"=>"1"} permitted: false>
但数据不会保存到数据库中。。。
2021年4月7日更新我强大的params函数看起来像这个
def welding_certificate_params
params.require(:welding_certificate).permit(:number, :valid_since, :valid_until, :material_group, :diameter_min, :diameter_maks, :thk_min, :thk_maks, :methods, :code, :bw, :fw, :body_id, :bw_positions, :fw_positions, :prolongation_date)
end
我更改了复选框,使它们看起来像这个
<%= check_box_tag "welding_certificate[bw_positions]", "PA" %>PA
<%= check_box_tag "welding_certificate[bw_positions]", "PB" %>PB
通过这种方式,数据被发送到数据库,但仅作为数组的一个项而不是整个字符串。如果我改为
<%= check_box_tag "welding_certificate[bw_positions][]", "PA" %>PA
<%= check_box_tag "welding_certificate[bw_positions][]", "PB" %>PB
我要
Unpermitted parameter: :bw_positions
在记录器中。。。
我认为你文章中parameters对象的最后一部分可能是问题的一部分:permitted: false
意味着params没有通过强参数进行过滤。
我猜您的控制器中有一个名为welding_certificate_params
的方法,您需要将其更改为以下内容:
def welding_certificate_params
params.require(:welding_certificate).permit( [whatever other params you have], :bw_positions => [] )
end
有关更多信息,请参阅强参数的api
sam-谢谢
我的控制器
def welding_certificate_params
if params[:bw_positions]
params[:welding_certificate][:bw_positions] = Array(params[:bw_positions]).join(", ")
end
params.require(:welding_certificate).permit(:number, :valid_since, :valid_until, :material_group, :diameter_min,
:diameter_maks, :thk_min, :thk_maks, :methods,
:code, :bw, :fw, :body_id, :bw_positions, :fw_positions,
:prolongation_date)
end
我的视图
<% positions = ["PA", "PB", "PC", "PD"] %>
<% positions.each do |position| %>
<%= check_box_tag "bw_positions[]", position %><%=" #{position}"%>
<%end%>
它终于工作了:D