我有 3 个模型和多态关系。 帖子:
#models/post.rb
class Post < ActiveRecord::Base
after_create :create_vote
has_one :vote, :dependent => :destroy, :as => :votable
protected
def create_vote
self.vote = Vote.create(:score => 0)
end
end
评论:
#models/comment.rb
class Comment < ActiveRecord::Base
after_create :create_vote
has_one :vote, :dependent => :destroy, :as => :votable
protected
def create_vote
self.vote = Vote.create(:score => 0)
end
end
投票(多态)
#models/vote.rb
class Vote < ActiveRecord::Base
belongs_to :votable, :polymorphic => true
end
正如你所看到的,我有相同的回调。怎么比较容易呢?如果我制作一个带有回调的模块,这是正确的吗?
最佳答案
是的,您可以定义一个包含相同可重复方法的模块,但是当包含该模块时,您还必须定义所有 ActiveRecord 宏。
它可能看起来像这样:
module VoteContainer
def self.included(base)
base.module_eval {
after_create :create_vote
has_one :vote, :dependent => :destroy, :as => :votable
}
end
protected
def create_vote
self.vote = Vote.create(:score => 0)
end
end
class Comment < ActiveRecord::Base
include VoteContainer
end
关于ruby-on-rails - 简化模型中的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9654215/