在Rails中执行类似操作的正确方法

时间:2012-09-10 22:14:22

标签: ruby-on-rails ruby-on-rails-3

我有一个与Projects相对应的rails Model和Controller。每个项目都有多种状态。假设状态可以是提案,已批准,已存档。

在我的控制器中,我有一个索引操作。但是,在整个应用程序的观点中,我想链接到提案,已批准和已归档的项目,并仅显示这些项目。

我可以创建批准,提议,存档等操作,并让那些只能匹配。

我正在考虑的另一件事是每个链接都将变量传递给params,然后指示索引操作的作用。

这两个中的哪一个是正确的方式和/或我在轨道中遗漏了什么?

1 个答案:

答案 0 :(得分:6)

我绝对更喜欢params中变量集的选项。这种方式很干,添加新状态几乎是不费吹灰之力的。为了实现它,我将使用以下代码:

# routes.rb

match 'projects/:filter' => 'projects#filter', :constraints => { :filter => /^approved$|^archived$|^proposal$/}

# ProjectsController.rb

  def filter
    @projects = Project.where(:status => params[:filter])
  end

这样,如果添加更多状态,您只需要在路径定义中进行过滤。