Rails模型仅继承业务逻辑

时间:2014-11-30 17:08:52

标签: ruby-on-rails ruby ruby-on-rails-4 activerecord

在rails 4应用程序中,我有两个模型具有相同的模式但不同的表。它们是FeedEntryHistoricalFeedEntry。我希望HistoricalFeedEntry仅继承我添加到FeedEntry的功能。模型看起来像这样:

class FeedEntry < ActiveRecord::Base
  def self.published_at_cutoff
    # date cutoff before which entries are old
    Time.now - 1*7*24*60*60
  end
end

class HistoricalFeedEntry < FeedEntry
end

当我进入rails控制台并执行HistoricalFeedEntry.all时,我从FeedEntry表中获得了所有结果。我想要的是只继承published_at_cutoff(以及我定义的其他方法)。感谢。

1 个答案:

答案 0 :(得分:1)

你可以使用混合物来做这样的事情。创建一个包含业务逻辑,类方法和实例方法的模块。并在每个模型中“包含”它。如下所示:


class FeedEntry < ActiveRecord::Base
  include FeedEntryBusinessLogic
end

module FeedEntryBusinessLogic
  def self.published_at_cutoff
    # date cutoff before which entries are old
    Time.now - 1*7*24*60*60
  end
end

class HistoricalFeedEntry < ActiveRecord::Base
  include FeedEntryBusinessLogic
end

因为您使用的是Rails 4,所以可以使用Concerns(类似)。读: https://signalvnoise.com/posts/3372-put-chubby-models-on-a-diet-with-concerns