Rails需要有关控制器实践的建议

时间:2015-02-26 08:51:13

标签: ruby-on-rails design-patterns

我尝试在控制器中遵循RESTfull方法,但有时我需要的操作不适合默认操作。例如。我有一个索引操作呈现所有

的文章
def index
  @articles = Article.all
end

但如果我也想搜索它们怎么办?我应该为它创建单独的操作,还是应该膨胀现有的控制器,如:

def index
  if params[:search]
    @articles = Article.where(id: params[:search_id])
  else
    @articles = Article.all
  end
end

什么是正确的方法?

2 个答案:

答案 0 :(得分:1)

您应该使用相同的操作并仅创建索引操作。搜索逻辑转到文章模型。

您应该关注this

答案 1 :(得分:0)

我会将它保留在索引中。如果你想保持它的清洁并使其标准化,你就可以改变控制器代码:

def index
   @articles = Article.search(params[:search])
end

然后在文章

中添加一个类方法
class << self
  def search(options={})
    if options.blank?
      return self.all
    else
      ..other search logic
    end
  end
end

请注意,您为搜索提供的示例并不真正有意义,因为它指定了文章的ID。如果您已经知道该ID,那么这不是一个真正的搜索:您也可以转到该文章的显示页面。