【问题标题】:Rails: Where should I put this method?Rails:我应该把这个方法放在哪里?
【发布时间】:2015-10-31 01:40:48
【问题描述】:

我的应用程序中有多个模型用于不同类型的内容,我经常需要获取最近发布的模型。目前,我在我的应用程序控制器中使用helper_method :latest_content

这是放置此方法的最佳位置吗?如果是这样,我应该如何为它编写 rspec 测试?

【问题讨论】:

  • 请显示您的多个模型的代码以及latest_content 方法。

标签: ruby-on-rails ruby-on-rails-4 model-view-controller


【解决方案1】:

听起来您在多个模型中都有一个共同的功能。 Rails 有concerns 允许你这样做。

# app/models/concerns/searchable.rb
module Searchable
  extend ActiveSupport::Concern

  module ClassMethods
    def last_content
      # ... here whatever is the content of :last_content
    end
  end
end 


# app/models/model_x.rb
class ModelX < ActiveRecord::Base
  include Searchable
  ...
end

# app/models/model_y.rb
class ModelY < ActiveRecord::Base
  include Searchable
  ...
end

【讨论】:

  • 谢谢!这听起来正是我需要的东西。我会调查关注点。
  • 也许我还没有理解关注点——听起来这只是在模型中添加了通用功能?然后,如果我想找到最新的内容,我需要做类似Article.last.latest_content 的事情,即使这可能会返回Blog 或其他类? (澄清一下,我需要了解我的所有模型的最新内容。不仅仅是每个模型中的内容。)理想情况下,我希望能够致电link_to latest_content
  • 是的。关注点用于常见模型功能。例如。 Searchable、Commentable、Rateable 等。如果您希望有一个方法可以在各种模型中返回整体 latest_content,您可以使用新的模型类(可能包含相同模型的其他常用方法)或帮助程序。我通常会尽量在帮助程序中保留更少的代码。
猜你喜欢
  • 2016-05-13
  • 2010-09-28
  • 1970-01-01
  • 2020-09-30
  • 2011-12-11
  • 2014-02-27
  • 1970-01-01
  • 2016-08-25
相关资源
最近更新 更多