2010-12-14 3 views
5

Я не найти много информации о том, как это сделать, даже если есть много предложений о том, как передать PARAMS к редиректу с помощью hashs как этого redirect_toрельсов 3 redirect_to проходят Params поименованного маршрута

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

в моем приложении у меня есть следующий в маршрутах файл

match 'profile' => 'User#show' 

моих Лоосов шоу действий, как это

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

редирект происходит в том же контроллере пользователя как этого

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

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

Вопрос находится в действии регистра, когда я redirect_to как я прохожу по Params, чтобы я мог захватить этот пользователя из базы данных или еще лучше ... У меня уже есть переменная пользователя, так как я могу передать объект пользователя в действие show?

Матфея

ответ

7

Если вы делаете редирект, Rails фактически отправить 302 Moved ответ с URL в браузер и браузер будет отправить еще один запрос на этот URL. Таким образом, вы не можете «передать объект пользователя», как в Ruby, вы можете передавать только некоторые URL-адреса.

В этом случае вы, вероятно, хотите, чтобы изменить определение маршрутизации:

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

, а затем перенаправить так:

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

который работал идеально! Большое спасибо за помощь – mattwallace

2

Во-первых, я бы назвал свой маршрут, чтобы сделать используя его проще:

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

Вы бы перенаправить на него, например, так:

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

Затем вытащить пользователя из базы данных:

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

Как и в сторону, если вы используете что-то вроде Devise для проверки подлинности, он предоставляет метод current_user, и поэтому вам не нужно пройдите вокруг идентификатора пользователя:

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

redirect_to profile_path 

def show 
    @user = current_user 
end 
Смежные вопросы