我有一个带有product_id
外键的订单模型,用户可以在单个表单上指定delivery_day
。
如果用户选择了Monday
和Friday
,我想保存两个具有不同delivery_day
属性但相同product_id
的订单记录。
order
的多个记录与不同的delivery_day
参数。
标题>
使用循环显示日期名称
<% Date::DAYNAMES.each do |day| %>
<div class="field">
<%= label_tag "<%= day %>" %><br>
<%= check_box_tag "delivary_days[]" %>
</div>
<% end %>
现在,从控制器接收选定的日期名称为params[:delivary_days]
,然后相应地操作结果。
在你的控制器中:
params[:delivary_days].each do |day|
Order.create(other_parameters, :delivery_day => day)
end
我建议您去check_box_tag查看必要的选项。
将表单更新为
<%= f.label :delivery_day %><br>
<%= f.select(:delivery_day,options_for_select(Date::DAYNAMES), {multiple: true, data: {placeholder: "Select Days"}}) %>
更新你的控制器:
def create
delivery_days = order_params[:delivery_day]
delivery_days.each do |day|
@order = Order.new(order_params.merge({delivery_day: day}))
render :new unless @order.save
end
redirect_to @order, notice: 'Order was successfully
end
希望对你有帮助。由于
您应该从表单中取出选中的元素作为选定元素的数组。order[:delivery_day][]
.
你在表单中使用check_box
标签,这可能会导致一些问题。因为当你通过check_box
标签更新时有一个问题,你可以在这里阅读。
所以你最好使用check_box_tag helper,如上面的链接所建议的。
尝试像下面这样改变你的check_box代码:
<div class="field">
<%= hidden_feild_tag "order[delivery_day][]", nil %>
<%= ["mon", "tue", "wed", "thurs", "fri", "sat", "sun"].each do |day| %>
<%= check_box_tag "order[delivery_day][]", day, true_or_false_if_selected_before_add_condition %>
<%= label_tag day.capitalize %>
<% end %>
</div>
因此,您将在order[delivery_day][]
参数中选择参数。如果它包含空白,请使用ruby方法删除它们。
在您的创建和更新方法中尝试创建产品S:
order[delivery_day].each do |day|
Order.create(other_params, :delivery_day => day)
end