2010-08-15 64 views
0

我在出版物和類別之間有HABTM關係。在新的和編輯的觀點,我有這樣的:通過複選框編輯HABTM

Categories:<br /> 
<% @categories.each do |c| %> 
    &nbsp;<%= check_box_tag :category_ids, c.id, @publication.categories.include?(c), :name => 'publication[category_ids]' -%> 
    <%= "#{c.name}"%><br /> 
<% end -%> 

型號代碼:

class Publication < ActiveRecord::Base 
    has_many :listings 
    has_many :categories, :through => :listings, :order => "listings.position" 

這顯示就好了 - 在更新,但是,它只保存被選中的最後一類(如我檢查了多個類別,只有一個被保存),如果我沒有檢查任何框,它不會改變映射的內容。

回答

0

我的問題 - 我必須在Publication上實現category_ids setter。我實現它如下:

after_save :update_categories 
    attr_accessor :category_ids 

    def update_categories 
    unless category_ids.nil? 
     self.listings.each do |listing| 
     listing.destroy unless category_ids.include?(listing.category_id.to_s) 
     category_ids.delete(listing.category_id.to_s) 
     end 
     category_ids.each do |cid| 
     self.listings.create(:category_id => cid) unless cid.blank? 
     end 
     reload 
     self.category_ids = nil 
    end 
    end