HTTP 请求   URI   动作                   具名路由   作用   
GET         /users  index                  users_path   显示所有用户的页面
GET         /users/1  show                 user_path(user) 显示某个用户的页面
GET       /users/new  new                  new_user_path  创建(注册)新用户的页面
POST       /users   create                users_path  创建新用户
GET    /users/1/edit  edit            edit_user_path(user) 编辑 id 为 1的用户页面
PUT       /users/1  update            user_path(user) 更新用户信息
DELETE     /users/1   destroy        user_path(user)  删除用户
namespace "admin" do
  resources :posts, :comments
end
那么,访问/posts,调用 Admin::PostsController 时,如何写呢?
scope module: "admin" do
  resources :posts
end
或者
resources :posts, module: "admin"
当然,反过来,访问 /admin/posts 时,调用 PostsController,就这么写:
scope "/admin" do
  resources :posts
end
或者
resources :posts, path: "/admin/posts"
比如允许 /posts/1.1 访问,而禁止 /posts/1,那么代码如下:
constraints(id: /\d+\.\d+/) do
  resources :posts
end
在其他的资源引用上,也可以做如下限制:
resources :posts do
  constraints(post_id: /\d+\.\d+/) do
    resources :comments
  end
end
限制ip访问,比如 只允许 192.168.* 访问资源:
constraints(ip: /192\.168\.\d+\.\d+/) do
  resources :posts
end
动态请求时的匹配,比如下面的这个限制:
constraints(lambda { |req| req.env["HTTP_USER_AGENT"] =~ /iPhone/ }) do
  resources :iphones
end
当然你也可以把它放到model里:
class Iphone
  def self.matches?(request)
    request.env["HTTP_USER_AGENT"] =~ /iPhone/
  end
end
constraints(Iphone) do
  resources :iphones
end