Rails - передача параметров в redirect_to - единственная ли сессия? - PullRequest
5 голосов
/ 08 апреля 2011

В качестве корня моего приложения установлен контроллер.Он принимает параметр uid и проверяет, существует ли пользователь.Если нет, я хочу, чтобы он перенаправил на новую страницу пользователя и предварительно заполнил поле uid с помощью uid в параметре.

В моем root_controller:

def index
  if params[:uid]
    @user = User.find_by_uid(params[:uid])
    if (!@user.blank?)
      # do some stuff
    else
      session[:user_id] = params[:uid]
      redirect_to(new_user_path, :notice => 'Please register as a new user')
    end
  else
    # error handling
  end
end

В моем users_controller,GET / users / new action:

def new
  @user = User.new
  @user.uid = session[:user_id]
  # standard respond_to stuff here
end

Все это прекрасно работает, но является ли это приемлемым способом сделать это?Первоначально я пытался передать uid в операторе redirect, например:

redirect_to(new_user_path, :notice => 'Please register as a new user', :uid => params[:uid])

или даже протестировать его с помощью:

redirect_to(new_user_path, :notice => 'Please register as a new user', :uid => 'ABCD')

, но ни один из них, похоже, не передавал значение users_controller ... Iне удалось получить к нему доступ с помощью params [: uid] с этого контроллера.

Является ли сессия подходящим местом для хранения подобных вещей, или есть лучший способ передать его через перенаправление?Спасибо!

1 Ответ

13 голосов
/ 08 апреля 2011

Сессия подходит для хранения такого рода информации.В зависимости от того, что вы делаете с uid, на самом деле может быть опасно разрешать его чтение из URL.Представьте, что конечный пользователь был злонамеренным и начал вставлять туда идентификаторы других пользователей.

Для сообщений, которые должны продолжаться только до следующего запроса, в Rails действительно есть объект flash, который будет переносить его за вас.

http://guides.rubyonrails.org/action_controller_overview.html#the-flash

Тем не менее, если вы хотите перенаправить URL-адрес и передать несколько параметров, сделайте так:

redirect_to(new_user_path(:notice => 'Please register as a new user', :uid => 'ABCD'))

Параметры, которые вы хотите передатьаргументы для метода new_user_path, а не для метода redirect_to.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...