У меня есть модель Post , которая имеет полиморфную ассоциацию с моделью Голосование :
post.rb:
class Post < ActiveRecord::Base
attr_accessible :title, :content, :total_votes
belongs_to :user
has_many :votes, :as => :votable, :dependent => :destroy
end
voice.rb
class Vote < ActiveRecord::Base
belongs_to :votable, :polymorphic => true
belongs_to :user
before_create :update_total
protected
def update_total
self.votable.total_votes ||= 0
self.votable.total_votes += self.polarity
end
end
Как вы можете видеть в voice.rb Я хочу выполнить следующее:
Каждый раз, когда создается экземпляр Голосование , я хочу обновить столбец total_votes
экземпляра модели votable
(в данном случае экземпляр Post ).
Но ничего не происходит, когда я создаю голосование за пост с post.votes.create(:polarity => 1)
, столбец total_votes
поста по-прежнему nil
.
Есть предложения, чтобы это исправить?
РЕДАКТИРОВАТЬ:
Это тоже не сработало:
class Vote < ActiveRecord::Base
belongs_to :votable, :polymorphic => true
belongs_to :user
before_create :update_total
protected
def update_total
self.votable.total_votes ||= 0
self.votable.total_votes += self.polarity
self.votable.save!
end
end
schema.rb:
create_table "posts", :force => true do |t|
t.string "content"
t.integer "user_id"
t.datetime "created_at"
t.datetime "updated_at"
t.string "title"
t.integer "comments_count", :default => 0, :null => false
t.integer "total_votes"
end