2010-08-15 32 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