2010-05-04 35 views
5

Tôi muốn tạo tuyến đường ray để chỉnh sửa hồ sơ của người dùng.Tuyến đường ray phụ thuộc vào người dùng hiện tại

Thay vì phải sử dụng/người dùng /: id/chỉnh sửa, tôi muốn có một url như/edit_profile

Có thể tạo ra một con đường năng động có thể biến/edit_profile vào/người dùng/{user của id}/chỉnh sửa, hoặc tôi nên làm điều trong một bộ điều khiển hay?

+0

Tôi nghĩ đó là công việc định tuyến/bộ điều khiển có tên. –

+0

là nó có thể cho bạn để xây dựng một chút về những gì bạn có nghĩa là bởi điều này? cảm ơn! – Lowgain

Trả lời

4

bạn có thể muốn tạo một bộ điều khiển riêng biệt cho nhiệm vụ này nhưng bạn có thể al nên tiếp tục sử dụng users_controller và chỉ cần kiểm tra xem có một bộ params[:id]:

def edit 
    if params[:id] 
    @user = User.find(params[:id]) 
    else 
    @user = current_user 
    end 
end 

Nhưng bạn nên lưu ý rằng /users thường các tuyến đường để hành động index và không show nếu bạn vẫn còn có con đường map.resources :users. Nhưng bạn có thể thiết lập một tuyến đường đặc biệt khác kêu gọi rằng:

map.resources :users 
map.resource :profile, :controller => "users" 

Bằng cách này /users sẽ liệt kê tất cả những người sử dụng, /users/:id sẽ hiển thị bất kỳ người dùng và /profile sẽ hiển thị các show hiện đang đăng nhập trong trang người sử dụng. Để chỉnh sửa tiểu sử của riêng bạn, bạn sẽ gọi '/ hồ sơ/chỉnh sửa'.

+0

cảm ơn! Tôi đã sử dụng một cấu trúc URL khác, nhưng tôi đã có thể sử dụng câu trả lời của bạn để hoàn thành những gì tôi muốn! – Lowgain

3

Vì tuyến đường và bộ điều khiển phục vụ hai mục đích khác nhau, bạn sẽ cần cả hai.

Đối với bộ điều khiển, giả sử bạn đang lưu trữ id người dùng trong một phiên giao dịch, bạn chỉ có thể có chỉnh sửa phương pháp của bạn làm như sau:

def edit 
    @user = User.find(session[:user_id]) 
end 

Sau đó, có một con đường mà trông giống như sau:

map.edit_profile "edit_profile", :controller => "users", :action => "edit" 

tuyến đường này sẽ cung cấp cho bạn một con đường mang tên gọi edit_profile_path

0

câu trả lời Tomas Markauskas của có thể làm việc, nhưng đây là câu trả lời cho câu hỏi của bạn từ Hướng dẫn Rails:

get 'edit_profile', to: 'users#edit' 

Vì vậy, khi có người đi vào www.yoursite.com/edit_profile, nó sẽ lộ trình để www.yoursite .com/người dùng/chỉnh sửa.

Sau đó, trong bộ điều khiển của bạn, bạn có thể truy cập cho người dùng

@user = User.find(session[:current_user_id]) 

Giả sử bạn thiết rằng biến phiên khi ai đó đăng nhập vào. Ngoài ra, đừng quên kiểm tra xem họ đang đăng nhập. Điều này sẽ làm việc nếu bạn đang sử dụng Định tuyến Resourceful (Rails mặc định) hay không.

Nguồn: http://guides.rubyonrails.org/routing.html

0

làm cho các tuyến đường như

get '/users/:id/edit', to: 'users#edit', as: 'edit_profile' 

Như đã giải thích trong phần liên kết này 'Cách chăm chỉ':

http://augustl.com/blog/2009/styling_rails_urls/

Url sẽ

/users/edit_profile 

Vì ID không còn trong URL nên chúng tôi phải thay đổi mã một chút.

class User < ActiveRecord::Base 
    before_create :create_slug 

    def to_param 
    slug 
    end 

    def create_slug 
    self.slug = self.title.parameterize 
    end 
end 

Khi người dùng được tạo, phiên bản URL thân thiện của tiêu đề được lưu trữ trong cơ sở dữ liệu, trong cột sên.

Để hiểu rõ hơn đọc các liên kết dưới đây

http://blog.teamtreehouse.com/creating-vanity-urls-in-rails

0

ghi nó trong bất kỳ ứng dụng điều khiển nhà.

def set_roots

if current_user  
    redirect_to dashboard_home_index_path 
else  
    redirect_to home_index_path 
end  

cuối

trong tập tin routes.rb

root: to => 'nhà # set_roots'

trận đấu "/ find_roots" => "nhà #set_roots "

Các vấn đề liên quan