2

標準のブログ アプリでは、このルートを既存のルートに追加しました。

match '', to: 'blogs#show', constraints: { subdomain: /.+/ }

そして、これらは私の既存のルートでした/です:

resources :blogs do
  member { get :settings }
  member { get :stats }
  member { match ':year/:month/:day/:article_id', to: 'blogs#show_article', :constraints => { year: /\d{4}/, month: /\d{2}/, day: /\d{2}/ } }
end

私のコントローラーでは、@blog = Blog.find(request.subdomain) を実行します。簡単にするために、ID を使用します。後で、ブログ スラッグまたは追加のドメイン属性を使用します。

http://17.lvh.me:3000がブログ 17 を表示する限り、これは正常に機能します。しかし、私のメンバーのアクションは期待どおりにルーティングされません。ブログのサブドメインにいるので、 http://8.lvh.me:3000/settingsを期待しますが、 http://17.lvh.me:3000/blogs/17/settingsのみが機能します。

では、余分な冗長な /blogs/:id なしでサブドメインの下にルーティングする必要があることを、ブログ リソース メンバーのアクションにどのように伝えることができますか? これをすべて手動で行う必要がありますか? 何かが足りない気がします。

4

1 に答える 1

1

これを試して:

scope '/' do
 with_options :conditions => {:subdomain => /.+/}, :controller => :blogs do |site|
  site.match '', :action => :show
  site.get '/settings', :action => :settings
  site.get '/stats', :action => :stats
  site.match ':year/:month/:day/:article_id', to: 'blogs#show_article', :constraints => { year: /\d{4}/, month: /\d{2}/, day: /\d{2}/ }  
 end
end

Blog.find(request.subdomain)コントローラーの各アクションに必要です。

PS これは、Railsでサブドメインを使用する上で理論的には良い練習になると思いますが、個人的にはきれいな URLの方が好きです。

于 2012-10-13T23:23:23.143 に答える