Полиморфизм Альтернативный вопрос - PullRequest
0 голосов
/ 22 декабря 2010

Вот как я обрабатываю комментарии без использования фактического полиморфизма Rails:

class Comment < Active Record::Base
  belongs_to :commentable, :class_name => "Commentable", :foreign_key => "commentable_id"
end

class Commentable < ActiveRecord::Base
  set_table_name "commentable"
  has_many :comments, :dependent => :destroy
end

class Post < ActiveRecord::Base
  belongs_to :commentable, :class_name => "Commentable", :foreign_key => "commentable_id", :dependent => :destroy
  delegate    :comments, :to => :commentable

  before_create :make_commentable

  def make_commentable
    self.commentable = Commentable.new
  end
end

Это работает прозрачно, за исключением того факта, что когда вызывается make_commentable, только иногдаэто создает Commentable запись в базе данных.Кажется, он всегда работает при использовании rails s, но очень редко, когда от rails c.

Что случилось?

EDIT

Должно self.commentable = Commentable.new быть self.commentable = Commentable.create!

1 Ответ

0 голосов
/ 22 декабря 2010

Вместо использования make_commentable используйте предоставляемый Rails метод build_commentable.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...