在Ruby on Rails中查找复选框

时间:2016-04-02 16:47:15

标签: ruby-on-rails ruby ruby-on-rails-3

我有一个名为initial-scale=1的字段,delivery_day模型中的字段为string

在表单中,我想为星期日,星期一等每天提供 7个复选框,之后想要连续。

例如,如果用户检查星期日和星期五,我想要连接&将其存储为delivery_preference字段中的"Sunday,Friday"

先谢谢!!

3 个答案:

答案 0 :(得分:1)

可能有更好的解决方案,但当我遇到类似问题时,我使用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:[&#39; monday&#39;,&#39; tuesday&#39;]}这样的数组。您可以选择在控制器中连接,然后保存,或者可以将逻辑移动到模型中。

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

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

允许数组。

答案 1 :(得分:1)

您可以像这样设计表单 -

<%= 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

希望它有所帮助!

答案 2 :(得分:0)

我还没有足够的声誉留下简短的评论。但是,您的迁移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&amp;存储为”Sunday,Friday