代码之家  ›  专栏  ›  技术社区  ›  Steve Brewer

通过复选框编辑habtm

  •  0
  • Steve Brewer  · 技术社区  · 14 年前

    我在出版物和类别之间有一个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"
    

    这显示的很好-在更新时,虽然,它只保存最后一个被选中的类别(如果我选中多个类别,只保存一个),如果我不选中任何框,它不会更改映射的内容。

    1 回复  |  直到 13 年前
        1
  •  0
  •   Steve Brewer    14 年前

    我的问题-我必须在出版物上实现一个类别设置器。我是这样实施的:

    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