2010-12-14 29 views
5

Tôi không tìm thấy nhiều thông tin về làm thế nào để làm điều này mặc dù có rất nhiều gợi ý về cách để vượt qua params để chuyển hướng sử dụng hashs như redirect_to nàyray 3 redirect_to vượt qua params đến một con đường mang tên

:action => 'something', :controller => 'something' 

trong ứng dụng của tôi, tôi có điều sau đây trong các tuyến đường nộp

match 'profile' => 'User#show' 

Loos chương trình hành động của tôi như thế này

def show 
@user = User.find(params[:user]) 
    @title = @user.first_name 
end 

chuyển hướng xảy ra trong bộ điều khiển cùng một người dùng như thế này

def register 
    @title = "Registration" 
    @user = User.new(params[:user]) 

    if @user.save 
     redirect_to '/profile' 
    end 
    end 

Câu hỏi đặt ra là trong hành động đăng ký khi tôi redirect_to làm thế nào để vượt qua cùng các params để tôi có thể lấy mà dùng từ cơ sở dữ liệu hoặc tốt hơn chưa ... Tôi đã có một biến người dùng vì vậy làm cách nào để chuyển đối tượng người dùng đến hành động hiển thị?

-matthew

Trả lời

7

Nếu bạn đang làm một chuyển hướng, Rails sẽ thực sự gửi một phản ứng 302 Moved với một URL cho trình duyệt và trình duyệt sẽ gửi một yêu cầu đến URL đó. Vì vậy, bạn không thể "vượt qua đối tượng người dùng" như trong Ruby, bạn chỉ có thể vượt qua một số thông số mã hóa url.

Trong trường hợp này, bạn có lẽ sẽ muốn thay đổi định nghĩa định tuyến của bạn để:

match 'profile/:id' => 'User#show' 

và sau đó chuyển hướng như thế này:

redirect_to "/profile/#{@user.id}" 
+0

hoạt động hoàn hảo! Cảm ơn rất nhiều vì sự giúp đỡ – mattwallace

2

Trước hết, tôi muốn đặt tên cho tuyến đường của bạn, để làm sử dụng nó dễ dàng hơn:

match '/profile/:id' => 'users#show', :as => :profile 

Sau đó, bạn sẽ chuyển hướng đến nó, như vậy:

redirect_to profile_path(@user) # might have to use profile_path(:id => @user.id) 

Sau đó, để kéo người dùng từ các cơ sở dữ liệu:

def show 
    @user = User.find(params[:id]) # :id comes from the route '/profile/:id' 
    ... 
end 

Là một sang một bên, nếu bạn sử dụng một cái gì đó giống như lập mưu để xác thực, nó cung cấp cho bạn một phương pháp CURRENT_USER, và do đó bạn sẽ không cần phải chuyển xung quanh id của người dùng:

match '/profile' => 'users#show', :as => :profile 

redirect_to profile_path 

def show 
    @user = current_user 
end 
Các vấn đề liên quan