Rails通过表单传递创建动作的参数

时间:2019-01-05 13:56:27

标签: ruby-on-rails

我有模型Item和ItemCategory。物品归属于ItemCategory。

在Item表单上,我希望能够创建一个新的ItemCategory并将其分配给当前项目。

所以我在项目表单上添加了

<%= link_to '+', new_quick_category_path(item_id: @item.id), remote: true %>

然后在items_controller上

  def new_quick_category
    @item_category = ItemCategory.new
    @item = Item.find(params[:item_id])
  end

然后我得到以下表格:

<%= simple_form_for (@item_category), html: { id: :item_category}, remote: true do |f| %>
<%= f.error_notification %>
<%= f.error_notification message: f.object.errors[:base].to_sentence if f.object.errors[:base].present? %>
<h5> Name </h5>
<%= f.input :name, label: false %>

  <%= f.button :submit, "Create", class: "btn btn-sm btn-success" %>
<% end %>

现在使用新创建的item_category更新当前项目,我认为我需要在item_categories_controller上执行此操作:

    def create
    @item = Item.find(params[:item_id])
    @item.update_attributes(item_category_id: @item_category.id)
    ....
    end

所以我需要传递参数item_id来对item_categories_controller创建操作。

我想到的解决方案是将其传递给表单上的“创建”按钮:

  <%= f.button :submit, "Create"(item_id: @item.id), class: "btn btn-sm btn-success" %>

但它不起作用。

我该怎么办?还是我应该制作一个嵌套表格?

1 个答案:

答案 0 :(得分:2)

请尝试将项目设置为表单中的隐藏字段,以便在您提交表单时将其发送给控制器,隐藏字段应从此类参数中获取值

<%= hidden_field_tag :item_id, params[:item_id] %>