保存记录多次不同的参数Rails



我有一个带有product_id外键的订单模型,用户可以在单个表单上指定delivery_day

如果用户选择了MondayFriday,我想保存两个具有不同delivery_day属性但相同product_id的订单记录。

<标题>控制器/orders_controller.rb h1> 图/订单/_form.html.erb h1> 环顾四周,但找不到这个问题的答案。不确定嵌套的关联是否过度(如茧),因为我只是试图创建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

相关内容

  • 没有找到相关文章

最新更新