我有一个名为initial-scale=1
的字段,delivery_day
模型中的字段为string
。
在表单中,我想为星期日,星期一等每天提供 7个复选框,之后想要连续。
例如,如果用户检查星期日和星期五,我想要连接&将其存储为delivery_preference
字段中的"Sunday,Friday"
。
先谢谢!!
答案 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
“