我想要實現與能力博客\新聞應用程序:Rails的日期3.2友好的URL路由
- 顯示所有帖子的根:
example.com/
- 顯示所有帖子回答一些年:
example.com/2012/
- 秀回答一些年份和月份的所有帖子:
example.com/2012/07/
- 表現出一定的崗位以它的日期和毛坯:
example.com/2012/07/slug-of-the-post
所以我創建了一個樣機的routes.rb
文件:
# GET /?page=1
root :to => "posts#index"
match "/posts" => redirect("/")
match "/posts/" => redirect("/")
# Get /posts/2012/?page=1
match "/posts/:year", :to => "posts#index",
:constraints => { :year => /\d{4}/ }
# Get /posts/2012/07/?page=1
match "/posts/:year/:month", :to => "posts#index",
:constraints => { :year => /\d{4}/, :month => /\d{1,2}/ }
# Get /posts/2012/07/slug-of-the-post
match "/posts/:year/:month/:slug", :to => "posts#show", :as => :post,
:constraints => { :year => /\d{4}/, :month => /\d{1,2}/, :slug => /[a-z0-9\-]+/ }
所以我應該使用參數工作,index
行動和剛剛獲得通過塞後在show
行動(檢查日期是否corect是一個選項):
# GET /posts?page=1
def index
#render :text => "posts#index<br/><br/>#{params.to_s}"
@posts = Post.order('created_at DESC').page(params[:page])
# sould be more complicated in future
end
# GET /posts/2012/07/19/slug
def show
#render :text => "posts#show<br/><br/>#{params.to_s}"
@post = Post.find_by_slug(params[:slug])
end
而且我要實現to_param
爲我的模型:
def to_param
"#{created_at.year}/#{created_at.month}/#{slug}"
end
這是我從整夜在api/guides/SO搜索中學到的。
但問題是奇怪的事情不斷happenning我作爲新軌:
當我去
localhost/
,應用程式的空檔,並說,它援引show
行動,但第一個對象在數據庫已收到爲:(!原文如此)年:No route matches {:controller=>"posts", :action=>"show", :year=>#<Post id: 12, slug: "*", title: "*", content: "*", created_at: "2012-07-19 15:25:38", updated_at: "2012-07-19 15:25:38">}
當我去
localhost/posts/2012/07/cut-test
同樣的事情發生:No route matches {:controller=>"posts", :action=>"show", :year=>#<Post id: 12, slug: "*", title: "*", content: "*", created_at: "2012-07-19 15:25:38", updated_at: "2012-07-19 15:25:38">}
我覺得有一些很容易的,我沒有做,但我找不到它是什麼。
無論如何,這個帖子在解決問題時會有所幫助,因爲只有url的解決方案只適用於沒有日期和類似但沒有用的問題。
在此之前有2個'active_admin'指令,所以我不需要所有的資源。 – iEugene 2012-07-20 09:30:35