self.votable не присваивает значения votable экземпляру в обратном вызове модели? - PullRequest
1 голос
/ 08 февраля 2012

У меня есть модель 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

1 Ответ

1 голос
/ 08 февраля 2012

Когда вы создаете объект Vote, объект Post уже существует.Вы обновляете его, но не сохраняете.Попробуйте ввести следующий код:

def update_total
  self.votable.total_votes ||= 0
  self.votable.total_votes += self.polarity
  self.votable.save!
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...