余分なパス要素(スラッグ)をRails 3のURLに渡すためのルートを設定する正しい方法は何ですか?私はいくつかのあなたがリソースとしてオブジェクトをリストすると、あなたはショーと新しいものを得ることができます。 Railsは奨励、
http://somewebserver.com/topics/1/learning-rails
しかし/
は、パスの区切り文字と見なされているので、私はまだこのよう
http://somewebserver.com/topics/1
及びこれら
http://somewebserver.com/topics/new
http://somewebserver.com/topics/1/editRails 3 Routes - スラッグを可能にする
2
A
答えて
0
に動作するようになります。ここ
は一例ですあなたはslug
からIDを分離するために、よりニュートラルな
-
を使用します。
this screencastを参照してください。
それ以外の場合は、:id
のカスタム検証を渡して:id
に/
を含めることができますが、これは簡単ではないことをRailsに伝える必要があります。
# lib/topic_slugger.rb
class TopicSlugger
AD_KEY = "action_dispatch.request.path_parameters"
def self.call(env)
controller = (env["PATH_INFO"].split("/")[1].camelize+"Controller").constantize
glob = env[AD_KEY][:glob]
slug, action_name = nil
if glob
path_params = glob.split("/")
if path_params.length == 1
if ["new","edit"].include?(path_params.first)
# no slug present
action_name = path_params.first
else
slug = path_params.first
end
else
action_name = path_params.first
slug = path_params.last
end
end
env[AD_KEY][:slug] = slug if slug
action = if action_name # "new" or "edit"
action_name.to_sym
else
case env["REQUEST_METHOD"]
when "PUT" then :update
when "DELETE" then :destroy
else :show
end
end
controller.action(action).call(env)
end
end
# config/routes.rb
require 'topic_slugger'
Ztest::Application.routes.draw do
# handle show, new, edit, update, destroy
match 'topics/:id/*glob' => TopicSlugger
# handle index, create
resources :topics
end
これは、の要求を取る:あなたはこのような何かを行うことができるように
1
それはあなたのナメクジは、「1-学習レール」のように見えるようにするために、おそらくより良いですが、Railsの3以来、今allows the use of Rack applicationsは、ルートを処理します"/topics/1/foo/bar"
のフォームを作成し、globに組み合わせアクション/スラグ("new/learning-rails"
など)が含まれているか、スラッグ("learning-rails"
)が含まれているかどうかを判断し、環境の要求パラメータにスラッグを追加してからコントローラの動作は、それ自身がRackアプリケーションです。 "index"と "create"は通常resources
ステートメントで処理されます。
ですから、例えば"GET /topics/1/new/learning-rails"
のために、より一般的にレールのコミュニティのURLスラグと呼ばれる{ :id => "1", :slug => "learning-rails, :glob => "new/learning-rails" }
関連する問題
- 1. マウント可能なRails 3.1エンジンのための 'rake routes'のリスト
- 2. Rails Friendly ID Routes
- 3. Rails 3 Routes - idと異なるパラメータをルーティングする:
- 4. Rails Routes vs URLパラメータ
- 5. Rails routes logic
- 6. Ruby On Rails Overlapping Routes
- 7. スラッグ付きZF2/3キャッチオールルート
- 8. Rails、Active Admin、Devise、routes
- 9. Rails 3 Appのユーザカスタマイズ可能な背景
- 10. rails routes link_to specific controller actions
- 11. Laravel routes routesアレイ
- 12. FriendlyIdとAncestry Gem in Railsで重複したスラッグを許可する5
- 13. GrailsのRailsコマンド/機能 "rake routes"と同等の機能はありますか?
- 14. Rails :: FriendlyId、Globalize、slug_candidatesでスラッグを生成
- 15. Rails 3 - すべてのコントローラで使用可能な変数
- 16. Rspec rails routesエラーパラメータがありません
- 17. Production Rails 3アプリをThinでリロードすることは可能ですか?
- 18. RailsのFriendly_id:スラッグが正しく
- 19. エクスポート可能なカレンダー付きのRails 3アプリケーション
- 20. jQueryとRails 3でajaxのソート可能なリストを実装する
- 21. Railsルートでスラッグを翻訳する最も良い方法は何ですか
- 22. Rails 3、リンクされたモデルによる並べ替え可能なテーブル列?
- 23. js-routes(:: format)をURLに追加する
- 24. Swift 3でクリック可能なNSDataDetectorでリンクを検出可能にするOS X
- 25. FriendlyIDを使ってRailsでタイトルとは別にスラッグを編集
- 26. Rails 3のスラッグのプレフィックスに基づいてどのようにルーティングできますか?
- 27. Rails 3 route problem
- 28. rails prepend_view_pathマウント可能なエンジン
- 29. Ruby on Rails:アンロード可能
- 30. rails実行可能ソースコードリポジトリ
URLスタブのparamsハッシュで
TopicsController#new
に派遣されるだろう。小柄な人にしようとするのではなく、人々があなたに正しく質問することを理解するのに役立つかもしれないと考えてください。 –