1

我正在设置我的网站

www.website.com/articles/2013/07将在 7 月列出 2013 年的 www.website.com/articles/2013所有文章并将列出 2013 年的所有文章 www.website.com/articles/2013/07/title-of-article将仅列出特定文章

但是,我只能使上述三个中的第一个和最后一个工作。输入网址 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
4

2 回答 2

1

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

resources :articles, :except => :show
于 2013-07-08T02:53:32.883 回答
0

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

于 2013-07-08T02:57:06.293 回答