2013-08-21 3 views
0

Вот мои соответствующие модели:Создание ресурса, BELONGS_TO другого ресурса

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 

Очевидно моей создать метод не все, что полезно прямо сейчас, потому что он просто создает ListItem с не атрибуты, отличные от :id. Каков наилучший способ передать соответствующие параметры моему контроллеру? Любая помощь высоко ценится! Заранее спасибо.

ответ

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.

Смежные вопросы