Khi bạn tiếp xúc với một bộ điều khiển như một nguồn lực, hành động sau đây sẽ được tự động thêm vào:
show
index
new
create
edit
update
destroy
Những hành động này có thể được phân loại thành hai nhóm:
URL cho hành động thành viên có id của tài nguyên đích. E.g:
users/1/edit
users/1
Bạn có thể nghĩ :member
hoạt động như một phương pháp thể hiện trên lớp học. Nó luôn luôn áp dụng trên một nguồn tài nguyên hiện có.
hành động mặc định thành viên: show
, edit
, update
, destroy
URL cho :collection
hành động không chứa id của tài nguyên mục tiêu. Ví dụ:
users/login
users/register
Bạn có thể nghĩ :collection
hoạt động như một phương pháp tĩnh trên lớp học.
hành động bộ sưu tập mặc định: index
, new
, create
Trong trường hợp của bạn, bạn cần hai hành động mới để đăng ký. Những hành động này thuộc về: loại bộ sưu tập (vì bạn không có id của người dùng trong khi gửi các hành động này). Tuyến đường của bạn có thể thực hiện như sau:
map.resources :users, :collection => { :signup => :get, :register => :post }
URL cho những hành động như sau:
users/signup
users/register
Nếu bạn muốn loại bỏ một hành động tiêu chuẩn được tạo ra bởi Rails sử dụng: trừ /: chỉ lựa chọn:
map.resources :foo, :only => :show
map.resources :foo, :except => [:destroy, :show]
Sửa 1
tôi thường t hành động confirmation
dưới dạng hành động :member
. Trong trường hợp này params[id]
sẽ chứa mã xác nhận.
Route cấu hình:
map.resources :users, :member => { :confirm => :get}
URL
/users/xab3454a/confirm
confirm_user_path(:id => @user.confirmation_code) # returns the URL above
khiển
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
@KandadaBoggu, lời giải thích này trông tuyệt vời. Theo dõi để kiểm tra sự hiểu biết của tôi, nói rằng tôi muốn gửi liên kết "xác nhận tài khoản" trong email chào mừng của người dùng. Liên kết đó sẽ chứa băm xác thực 8 ký tự. Tôi có thêm 'map.resources: users,: member => {: validate =>: get}' không? Tham số 'băm' được cắm vào như thế nào? –
Cập nhật câu trả lời của tôi, hãy xem. –
Điều gì đang nói 'confirm_user_path' để sử dụng' @ user.confirmation_code' thay cho ký tự đại diện ': id' thay vì' @ user.foo' hoặc '@ user.bar'? Nếu đây là 'confirm_user_path (: id => @ user.confirmation_code)'? –