chcę wdrożyć aplikację blog \ aktualności z możliwością:Rails 3.2 przyjazne url routingu według daty
- pokazać wszystkie posty na root:
example.com/
- Pokaż wszystkie posty odpowiadając na kilka lat:
example.com/2012/
- pokaż Wszystkie posty odpowiedzi na kilka lat i miesięcy:
example.com/2012/07/
- wykazują pewną post przez jego datę i ślimak:
example.com/2012/07/slug-of-the-post
Więc stworzyliśmy makieta routes.rb
pliku:
# 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\-]+/ }
Więc powinienem pracować z params w index
działania i po prostu post przez ślimak w show
działanie (sprawdzenie, czy data jest corect jest opcją):
# 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
również muszę wdrożyć to_param
dla mojego modelu
def to_param
"#{created_at.year}/#{created_at.month}/#{slug}"
end
To wszystko, czego nauczyłem się od całonocnych poszukiwań w api/guide/SO.
ale problem jest dziwne rzeczy ciągle happenning dla mnie jako nowe do szyn:
Kiedy idę do
localhost/
, przerwy aplikację i mówi, że to był wywoływanyshow
działania, ale pierwszy obiekt w bazie zostały otrzymaliśmy jako: (sic!) roku: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">}
Kiedy idę do
localhost/posts/2012/07/cut-test
samo dzieje: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">}
czuję, że coś jest bardzo łatwe, że nie dokonały, ale nie mogę znaleźć co to jest.
W każdym razie, ten post będzie pomocny, gdy zostanie rozwiązany, ponieważ istnieją rozwiązania tylko dla samych błędów w adresie URL bez daty i podobnych, ale nieprzydatnych pytań.
Są 2 dyrektywy 'active_admin' przed tym tylko, więc nie potrzebuję wszystkich tych zasobów. – iEugene