mač*_*ček 22 rest routing ruby-on-rails
我正在读这两页
Rails指南页面显示
map.resources :photos, :new => { :upload => :post }
Run Code Online (Sandbox Code Playgroud)
及其相应的URL
/photos/upload
Run Code Online (Sandbox Code Playgroud)
这看起来很精彩.
我的routes.rb
节目就是这样
map.resources :users, :new => { :signup => :get, :register => :post }
Run Code Online (Sandbox Code Playgroud)
当我做: [~/my_app]$ rake routes
我看到添加了两条新路线
signup_new_user GET /users/new/signup(.:format)
register_new_user POST /users/new/register(.:format)
Run Code Online (Sandbox Code Playgroud)
注意包含/new
!我不希望这样.我只是想/users/signup
和/users/register
(如Rails路由指南中所述).
有帮助吗?
Har*_*tty 61
将控制器公开为资源时,将自动添加以下操作:
show
index
new
create
edit
update
destroy
Run Code Online (Sandbox Code Playgroud)
这些操作可以分为两组:
:member
行动成员操作的URL具有目标资源的id.例如:
users/1/edit
users/1
Run Code Online (Sandbox Code Playgroud)
您可以将:member
操作视为类的实例方法.它始终适用于现有资源.
默认成员的行为:show
,edit
,update
,destroy
:collection
行动操作的URL :collection
不包含目标资源的ID.例如:
users/login
users/register
Run Code Online (Sandbox Code Playgroud)
您可以将:collection
操作视为类的静态方法.
默认动作集:index
,new
,create
在您的情况下,您需要两个新的注册操作.这些操作属于:集合类型(因为您在提交这些操作时没有用户的ID).您的路线如下:
map.resources :users, :collection => { :signup => :get, :register => :post }
Run Code Online (Sandbox Code Playgroud)
操作的URL如下:
users/signup
users/register
Run Code Online (Sandbox Code Playgroud)
如果要删除Rails生成的标准操作,请使用:except /:only options:
map.resources :foo, :only => :show
map.resources :foo, :except => [:destroy, :show]
Run Code Online (Sandbox Code Playgroud)
编辑1
我通常将confirmation
行动视为一种:member
行为.在这种情况下params[id]
将包含确认码.
路线配置:
map.resources :users, :member => { :confirm => :get}
Run Code Online (Sandbox Code Playgroud)
网址
/users/xab3454a/confirm
confirm_user_path(:id => @user.confirmation_code) # returns the URL above
Run Code Online (Sandbox Code Playgroud)
调节器
class UsersController < ApplicationController
def confirm
# assuming you have an attribute called `confirmation_code` in `users` table
# and you have added a uniq index on the column!!
if User.find_by_confirmation_code(params[id])
# success
else
# error
end
end
end
Run Code Online (Sandbox Code Playgroud)
pra*_*ari 12
这可以作为另一种语法 - 有些可以知道.
语法1:
resources :users do
member do
get 'signup'
post 'register'
end
end
Run Code Online (Sandbox Code Playgroud)
耙路输出将包括
signup_users GET /users/signup(.:format) {:action=>"signup", :controller=>"users"}
register_users POST /users/register(.:format) {:action=>"register", :controller=>"use
Run Code Online (Sandbox Code Playgroud)
RS"}
语法2: 如果只有一个收集路由
resources :users do
get 'signup', :on => :collection
end
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
22488 次 |
最近记录: |