Mam problem z powyzszym rozwiązaniem mianowicie modele Article oraz Category są w relacji habtm.
Article:
[code]class Article < ActiveRecord::Base
before_destroy :cache_categories
after_save :update_counters
after_destroy :update_counters
private
def cache_categories
@cached_categories = self.categories.all
end
def update_counters
(@cached_categories || self.categories).each(&:update_articles_count)
end
end[/code]
model category:
[code]class Category < ActiveRecord::Base
has_and_belongs_to_many :articles
def update_articles_count
update_attribute :articles_count, self.articles.count
end
end[/code]
Przy tworzeniu artykułu i modyfikacji kategorii (można dodać artykul max do 3 kategorii a min do 1)
[code]<% semantic_form_for(@article, :html => {:multipart => true}) do |f| %>
<% f.inputs :name => "Treść i kategoria artykułu" do %>
<%= f.input :title, :label => "Tytuł" %>
<%= f.label(:wstęp_do_artykułu, :synopsis, :required => true) %>
<%= f.tinymce_managed :synopsis, :width => '600px', :height => '200px' %>
<%= f.label(:treść_artykułu, :body, :required => true) %>
<%= f.tinymce_managed :body, :width => '600px', :height => '400px' %>
<%= f.input :published, :label => "Publikować?", :as => :radio %>
<%= f.input :categories, :label => "Kategoria", :as => :check_boxes, :collection => nested_set_options(Category, @category) {|i| "#{'-' * i.level} #{i.name}" }, :for => :categories %>
<% end %>
<% f.inputs :name => "Autorzy i Fotografowie Artykułów" do %>
<%= f.input :authors, :label => "Autorzy", :as => :check_boxes, :collection => Author.all %>
<%= f.input :photographers, :label => "Fotografowie", :as => :check_boxes, :collection => Photographer.all %>
<% end %>
<% f.buttons do %>
<%= f.commit_button :label => "Zapisz" %>
<% end %>
<% end %>[/code]
Występuje przy modyfikacjach kategorii artykulu pewien problem w wierszu articles_count ponieważ nie aktualizuje się on prawidłowo. Po pierwsze licznik ten się nie zmniejsza ale tylko zwiększa i przy np. przy zmianie z jednej kategorii na np 3 aktualizuje sie np tylko jeden wiersz a nie trzy. W czym może istnieć problem?