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

Rails need advice on controller practices

我尝试在控制器中遵循 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

正确的方法是什么?

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

你应该关注 this

我会把它保存在索引中。如果你想保持它的清洁和标准化,你可以这样更改控制器代码:

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

然后在文章

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

请注意,您提供的搜索示例实际上没有意义,因为它指定了文章的 ID。如果您已经知道 id 那么这并不是真正的搜索:您不妨直接转到文章的显示页面。