Вот как я обрабатываю комментарии без использования фактического полиморфизма 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!