我對rails編程還是很新的,這是我在stackoverflow的第一個問題。如何使用has_many關聯,取消關聯對象
我有模型組和產品,像這樣:
class Group < ActiveRecord::Base
has_many :products
end
class Products < ActiveRecord::Base
belongs_to :Group
end
現在,我有一些數據充斥着多個產品在多個組。當我想將產品從一個組移到另一個時,我應該怎麼做?
- 我應該使用has_many:通過關係(這是唯一的建議方式)? (因爲我認爲處理3個表格比2個表格處理起來更復雜且計算密集)。
- 是否有這樣做的首選方法?
下面是我嘗試過的東西: - 在產品中設置nil to group_id並更新它以刪除工作的關聯。我不確定這是否是解除對象分離的正確方法。
- 我試圖在像下面這樣的groups_controller.rb中創建一個自定義函數。 (我知道這可能不是這樣做的正確的方式,但我有點絕望)在/view/groups/show.html.erb
我
<% form_tag group_add_reference_path(@group.id), :method => 'put' do %>
<%= hidden_field_tag 'params[group_id]', "#{@group.id}" %>
<div class="field">
<%= collection_select('params', 'product_id', Product.where(:group_id => nil), :id, :name) %>
</div>
<div class="actions">
<%= submit_tag "assign", :name => nil %>
</div>
<% end %>
和在groups_controller.rb我在railsguides的association_basics
def add_reference
@group = Group.find(params[:group_id])
@product = Product.find(params["product_id"])
@group.products << @product
end
-I've讀取詳細的協會參考篇章,因爲它集合< <(對象)的功能加入,不過,我覺得我應該可以做一些事情接近上面。 (這是行不通的,因爲@product由於某種原因似乎爲零,並且即使我將其設置爲有效的ID並對其進行硬編碼,之後它也會失敗)
我忘了寫我已經嘗試過。在這種情況下,它表示找不到'update_attribute'方法。因此,我在Group模型中添加了'accept_nested_attributes_for:products'。儘管如此,它沒有奏效。我甚至允許從產品組控制器上調用update_attribute? – user1098655 2011-12-14 22:33:05
感謝您的評論。您的評論幫助我弄清楚爲什麼我沒有收到@product。 – user1098655 2011-12-15 12:09:52