rails 3 redirect_to для передачи параметров на именованный маршрут - PullRequest
5 голосов
/ 14 декабря 2010

Я не нахожу много информации о том, как это сделать, хотя есть много предложений о том, как передать параметры для перенаправления с использованием хэшей, подобных этому redirect_to

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

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

match 'profile'   =>  'User#show'

мое действие 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

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

- Матфея

Ответы [ 2 ]

7 голосов
/ 14 декабря 2010

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

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

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

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

redirect_to "/profile/#{@user.id}"
2 голосов
/ 14 декабря 2010

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

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...