Ruby on rails 如何使用复选框将模型属性构建为字符串(RubyonRails)

Ruby on rails 如何使用复选框将模型属性构建为字符串(RubyonRails),ruby-on-rails,Ruby On Rails,我有一个具有bw_位置属性的焊接_证书模型。 我希望能够通过复选框选择焊接位置 <%= check_box_tag "bw_positions[]", "PA" %>PA <%= check_box_tag "bw_positions[]", "PB" %>PB <%= check_box_tag "bw_positions[]", "PC" %&

我有一个具有bw_位置属性的焊接_证书模型。 我希望能够通过复选框选择焊接位置

<%= check_box_tag "bw_positions[]", "PA" %>PA
<%= check_box_tag "bw_positions[]", "PB" %>PB
<%= check_box_tag "bw_positions[]", "PC" %>PC
我更改了复选框,使它们看起来像这样

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

在logger…

中,我认为您文章中parameters对象的最后一部分可能是问题的一部分:
允许:false
表示参数没有通过强参数过滤

我猜您的控制器中有一个名为
welding\u certificate\u params
的方法,您需要更改为以下内容:

def welding_certificate_params
  params.require(:welding_certificate).permit( [whatever other params you have], :bw_positions => [] )
end
有关更多信息,请参见-谢谢

我的控制器

  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

bw_位置嵌套在焊接_证书中。您需要
params[:焊接证书][:bw\u位置]
。谢谢您,但将
PA
更改为
PA
并没有改变情况。。。我尝试了
PA
welding_certificate-singular,但这导致了控制台“Unpermited parameter::bw_positions”中的错误,您需要向我们显示更多详细信息,如您的型号。控制器中没有。在您最初的帖子中,您试图使用
params[:bw\u positions]
构建一个数组,它将是
params[:bw\u certificate][:bw\u positions]
def welding_certificate_params
  params.require(:welding_certificate).permit( [whatever other params you have], :bw_positions => [] )
end
  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%>