Method: ActionDispatch::Routing::Mapper::Scoping#scope
- Defined in:
- lib/action_dispatch/routing/mapper.rb
#scope(*args) ⇒ Object
Used to scope a set of routes to particular constraints.
Take the following route definition as an example:
scope :path => ":account_id", :as => "account" do
resources :projects
end
This generates helpers such as account_projects_path, just like resources does. The difference here being that the routes generated are like /rails/projects/2, rather than /accounts/rails/projects/2.
Supported options
- :module
-
If you want to route /posts (without the prefix /admin) to Admin::PostsController, you could use
scope :module => "admin" do resources :posts end - :path
-
If you want to prefix the route, you could use
scope :path => "/admin" do resources :posts endThis will prefix all of the
postsresource’s requests with ‘/admin’ - :as
-
Prefixes the routing helpers in this scope with the specified label.
scope :as => "sekret" do resources :posts end
Helpers such as posts_path will now be sekret_posts_path
- :shallow_path
-
Prefixes nested shallow routes with the specified path.
scope :shallow_path => “sekret” do
resources :posts do resources :comments, :shallow => true endThe
commentsresource here will have the following routes generated for it:post_comments GET /sekret/posts/:post_id/comments(.:format) post_comments POST /sekret/posts/:post_id/comments(.:format) new_post_comment GET /sekret/posts/:post_id/comments/new(.:format) edit_comment GET /sekret/comments/:id/edit(.:format) comment GET /sekret/comments/:id(.:format) comment PUT /sekret/comments/:id(.:format) comment DELETE /sekret/comments/:id(.:format)
516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 |
# File 'lib/action_dispatch/routing/mapper.rb', line 516 def scope(*args) = args. = .dup if name_prefix = .delete(:name_prefix) [:as] ||= name_prefix ActiveSupport::Deprecation.warn ":name_prefix was deprecated in the new router syntax. Use :as instead.", caller end [:path] = args.first if args.first.is_a?(String) recover = {} [:constraints] ||= {} unless [:constraints].is_a?(Hash) block, [:constraints] = [:constraints], {} end .each do |option| if value = .delete(option) recover[option] = @scope[option] @scope[option] = send("merge_#{option}_scope", @scope[option], value) end end recover[:block] = @scope[:blocks] @scope[:blocks] = merge_blocks_scope(@scope[:blocks], block) recover[:options] = @scope[:options] @scope[:options] = (@scope[:options], ) yield self ensure .each do |option| @scope[option] = recover[option] if recover.has_key?(option) end @scope[:options] = recover[:options] @scope[:blocks] = recover[:block] end |