在路线中,匹配#index不起作用......为什么?

时间:2013-07-08 02:45:54

标签: ruby-on-rails routes

我正在设置我的网站

www.website.com/articles/2013/07将列出2013年7月份的所有文章 www.website.com/articles/2013将列出2013年的所有文章 www.website.com/articles/2013/07/title-of-article将仅列出具体文章

但是,我只能获得上述3中的第一个和最后一个。输入网址 www.website.com/articles/2013无法正常运作。具体来说,我得到的noMethodError in Articles#show对我来说没有意义,因为我已将路线与Articles#index匹配。

有人可以解释一下这里发生了什么吗?我不知道我在哪里弄错了。

路线:

match "/articles/:year", :to => "articles#index",
:constraints => { :year => /\d{4}/ }, :as=> :posts_year

match "/articles/:year/:month", :to => "articles#index",
:constraints => { :year => /\d{4}/, :month => /\d{1,2}/ }, :as => :posts_month

match "/articles/:year/:month/:slug", :to => "articles#show", 
:constraints => { :year => /\d{4}/, :month => /\d{1,2}/, :slug => /[a-z0-9\-]+/ }, :as => :posts_date

在我的模型中我有:

def year
  created_at.year
end

def month
  created_at.strftime("%m")
end

2 个答案:

答案 0 :(得分:1)

你的路线文件中有resources :articles吗?如果这样做,那就解释了错误。将resources :articles移到问题中提到的路线下方,一切都应该正常。或者,您可以将其更改为:

resources :articles, :except => :show

答案 1 :(得分:0)

猜测如果您将文章定义为资源,则默认的show /:id路由优先于您的:posts_year路由。也许试试resources :articles, :except => [:show]