【问题标题】:Rails: Using multiple checkboxes for single fieldRails:对单个字段使用多个复选框
【发布时间】:2019-09-26 12:17:11
【问题描述】:

我有一个带有多个复选框的表单,我想在保存到数据库之前将它们的值组合成一个字符串。我的表单设计如下:

<%= simple_form_for(@health_profile) do |f| %>

    <% @hp_prior.medications.split(", ").each do |med| %>
        <%= check_box_tag "health_profile[medications][]", med, false, id: med, multiple: true %>
        <label for="<%= med %>"><%= med.capitalize %></label>
    <% end -%>

<% end -%>

在我的控制器中,我已将 :medications 更改为接受一个数组:

def health_profile_params
    params.require(:health_profile).permit(:medications => [])
end

但是我遇到了数据问题,因为提交的表单参数是:

Parameters: {... "health_profile"=>{"medications"=>["zyrtec for allergies", "advil"]}, "commit"=>"Submit"}

但在调用HealthProfile.new(health_profile_params) 后,记录显示为:

#<HealthProfile:0x007fb08fe64488> {... :medications => "[\"zyrtec for allergies\", \"advil\"]"}

如何组合这些值,使最终的 @health_profile 看起来像:

#<HealthProfile:0x007fb08fe64488> {... :medications => "zyrtec for allergies, advil"}

【问题讨论】:

    标签: ruby-on-rails forms checkbox


    【解决方案1】:

    为模型上的属性实现自定义设置器:

    def medications=(value)
      value = value.join(', ') if value.is_a?(Array)
      write_attribute :medications, value
    end
    

    【讨论】:

    • ...我真的没想到它会起作用,因为它看起来像是模型上的字符串。我想我需要阅读二传手!很高兴!
    • 您看到该字符串是因为您在字符串属性上设置了一个数组,并且默认情况下 rails 序列化了该数组(您在序列化后看到了结果值)。使用此设置器,您实际上可以控制来自请求的数组,然后按照您想要的方式对其进行序列化,这就是它起作用的原因。
    猜你喜欢
    • 2014-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-18
    相关资源
    最近更新 更多