以下是我的相关模型:
class ListItem < ActiveRecord::Base
belongs_to :inventory_item
belongs_to :shopping_list
belongs_to :item
end
class ShoppingList < ActiveRecord::Base
has_many :list_items
belongs_to :user, :foreign_key => :user_id
end
class InventoryItem < ActiveRecord::Base
belongs_to :item, :foreign_key => :item_id
belongs_to :vendor
has_many :list_items
end
我想要一个按钮来创建属于他们拥有的用户指定列表的ListItems
。新的ListItem
也需要通过相应的:item_id
和:inventory_item_id
。这是我当前观点的相关部分:
<tr>
<% item.inventory_items.each do |product| %>
<td><%= button_to "#{product.price}",
{:controller => :list_items,
:action => 'create',
:id => #what goes here??,
:method => :create %></td>
<% end %>
</tr>
我的ListItems控制器创建方法:
def create
ListItem.create
flash[:success] = "List Item Added."
redirect_to search_results_path(params[:search])
end
显然,我的create方法现在并不是那么有用,因为它只是创建了一个ListItem而没有:id
以外的属性。将适当的参数传递给控制器的最佳方法是什么?任何帮助深表感谢!提前谢谢。
答案 0 :(得分:0)
在围绕SO等进行一堆窥探后,我认为实现此目的的最佳方法是使用带有隐藏字段的表单,如下所示:
<%= form_tag("/list_items", method: "post") do %>
<%= hidden_field_tag(:item_id, item.id) %>
<%= hidden_field_tag(:inventory_item_id, product.id) %>
<%= hidden_field_tag(:shopping_list_id, ShoppingList.first.id) %>
<%= submit_tag("#{product.price}") %>
这对我来说效果很好,在这个例子中比使用button_to
更干净。