2

我有 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

如您所见,我有相同的回调。怎么更容易?如果我制作一个带有回调的模块,这对吗?

4

1 回答 1

2

是的,您可以定义一个包含相同可重复方法的模块,但是当包含该模块时,您还必须定义所有 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
于 2012-03-11T11:06:02.543 回答