在 Rails 上连接 Ruby 中的复选框

concating checkboxes in Ruby on Rails

我有一个名为 delivery_day 的字段,它是 delivery_preference 模型中的 string 类型。

形式上,我想提供7个checkboxes像周日,周一等每一天,以后想concat。

例如,如果用户检查周日和周五,我想将其作为 "Sunday,Friday" 连接并存储在 delivery_day 字段中。

提前致谢!!

我还没有足够的声誉来发表简短的评论。但是,您的迁移 delivery_day 中是否有类似于 t.boolean :public, default: true_or_false_here 的内容?

如果是这样,在 form 中,您可以有类似的内容:

...
      <div class="form-group">
        <%= f.label :public, class: 'checkbox' do %>
          <%= f.check_box :public %> Monday
        <% end %>
      </div>
      <div class="form-group">
        <%= f.label :public, class: 'checkbox' do %>
          <%= f.check_box :public %> Tuesday
        <% end %>
      </div>
...

在上述之后,您可以指定(通过布尔逻辑)您的 "concat & store it as "Sunday,Friday"

可能有更好的解决方案,但是当我遇到类似问题时,我使用check_box_tag解决了。

<%= check_box_tag "delivery_preference[delivery_day][0]", 'monday' %>Monday
<%= check_box_tag "delivery_preference[delivery_day][1]", 'tuesday' %>Tuesday
<%= check_box_tag "delivery_preference[delivery_day][2]", 'wednesday' %>Wednesday
<%= check_box_tag "delivery_preference[delivery_day][3]", 'thursday' %>Thursday
<%= check_box_tag "delivery_preference[delivery_day][4]", 'friday' %>Friday
<%= check_box_tag "delivery_preference[delivery_day][5]", 'saturday' %>Saturday
<%= check_box_tag "delivery_preference[delivery_day][6]", 'sunday' %>Sunday

然后您将在控制器中收到一个类似于 { deliver_day: ['monday', 'tuesday'] } 的数组。您可以选择在您的控制器中进行连接,然后保存,或者您可以将逻辑移动到您的模型中。

在你的控制器中,你的强参数应该像

params.require(:delivery_preference).permit(.., :deliver_day => [])

允许数组。

你可以这样设计你的表单-

<%= form_for @delivery_preference do |f|%>
 <%= f.check_box :delivery_day, {multiple: true}, "Sunday" %>Sunday
 <%= f.check_box :delivery_day, {multiple: true}, "Monday" %> Monday
 <%= f.submit "Add" %>
<% end %>

提交表单后,您可以在控制器中选择复选框,如下所示:

def your_action_name
  params[:delivery_preference][:delivery_day].delete("0")
  DeliveryPreference.create(delivery_day: params[:delivery_preference][:delivery_day].join(","))
end

希望对您有所帮助!