如何为必须以多种方式呈现的模型构建控制器?

时间:2014-10-10 06:36:02

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

假设有一个Photos模型。对于这个模型我有几个视图:最近的照片,流行的照片,最喜欢的照片等..我如何为这个模型创建控制器。有不同的选择:

  1. 一个PhotosController行动index。我将参数发送到索引操作,并根据此参数,控制器向数据库发出查询并将@photos返回给视图。这样做的缺点是index动作会变得很大。

  2. 与上述相同,但决定将要进行的查询的逻辑提取到服务中,以便控制器保持精简状态。

  3. 一个PhotosController包含多项操作recentpopularfavorite等,但这不是很安静。

    < / LI>
  4. index个动作的几个控制器 - RecentPhotosControllerPopularPhotosController等。在这种情况下,我仍然必须正常PhotosController才能进行{{1} },show行动。

  5. 是否有针对此的既定最佳实践以及选择其中一个选项时需要考虑的因素是什么?

1 个答案:

答案 0 :(得分:2)

我会选择1。

控制器不应该变大:你必须从服务对象中的params创建查询。

类似的东西:

def index 
  @photos = PhotoQuery.new(params).call
  #....
end

class PhotoQuery
  attr_reader :params
  def initialize(params)
    @params = params
  end

  def call
    case params[:type]
    when 'recent' then Photo.recent
    else Photo.all
    end
  end 
end