Rails路由方法需要建议

时间:2011-03-30 11:40:58

标签: ruby-on-rails

我的Rails中的URL应该是这样的:

http://foobar.com/articles?category=recent 

- 或 -

http://foobar.com/articles/recent

我发现前者更加RESTFUL,但后者更清洁(代码方面)。例如,代码可能如下所示:

在文章控制器中:

def index
  if params[:category] == 'recent'
    @articles = Article.by_recent
  elsif params[:category] == 'expired'
    @articles = Article.by_expired
  end
end

在文章中,索引视图:

<% unless @articles.blank? %>
  <ul>
    <% @articles.each do |article| %>
      <li><%= article.title %></li>
      <li><%= article.content %></li>
    <% end %>
  </ul>
<% end %>

使用 http://foobar.com/articles/recent ,我必须自定义路线。类似的东西:

match 'articles/:category' => 'articles#index' 

以上将访问文章控制器,索引操作。甚至:

resources :articles do
  collection do
    get 'recent'
  end
end

允许使用 http://foobar.com/articles/recent 等网址,但需要在文章控制器中执行“最近”操作。

在一天结束时,两者看起来都很有用。但这是普遍的共识?使用查询字符串方法( http://foobar.com/articles?category=recent )或其他方式( http://foobar.com/articles/recent )。

期待您的建议。

2 个答案:

答案 0 :(得分:0)

在我看来,articles/recent更加清晰,因为它避免了使用条件填充控制器操作,并且从用户角度看也更好。

答案 1 :(得分:0)

很明显,就像你说你可以走任何一种方式,但是因为像“最近”这样的东西是对条款的条件或查询,我会选择前者。如果它是一个嵌套属性和它自己的模型,第二种方法可以说是更好的,但是因为它不会真的失去很大的灵活性来改变和重构这种方法。

例如,如果您想要“旧”而不是“最近”,则无法简单地传入“旧”参数,但必须使用自己的操作和视图在同一控制器中对其进行硬编码作为“最近”,当然更多的工作是无用的。