Как заставить пользователя войти в действие и затем выполнить его позже - PullRequest
2 голосов
/ 21 апреля 2011

Я пытаюсь заставить пользователя войти в систему после того, как он вызовет это действие обновления в моем контроллере статей (я пытаюсь работать с постепенным включением), но как только он войдет в систему, я хочу по-прежнему вызывать это действие вместо остановки.

 def update
    @article.attributes = params[:article]
    @article.save

    #store this article as a session variable
    session[:pending_article] = @article.body

    respond_with(@article, :location => article_url(@article))
  end

Сейчас я использую before_filter для действия, которое требует от пользователя входа в систему

 def require_user
    unless current_user
      store_location
      flash[:notice] = "You must be logged in to access this page"
      redirect_to login_url
      return false
    end
  end

Однако я понимаю, что прежде чем фильтры останавливают исходное действие, как только они перенаправляют, обновление никогда не вызывается. По сути, я хочу, чтобы пользователь вошел в систему, чтобы сохранить статью, но я хочу сохранить его работу, поэтому я сохраняю тело статьи в переменной сеанса, которую я получаю позже. Есть ли лучший способ потребовать от пользователя входа в систему для какого-либо действия, но в любом случае вызвать его позже?

1 Ответ

2 голосов
/ 23 апреля 2011

В вашем методе require_user вы можете сделать что-то вроде этого:

session[:article] = params[:article]

Затем в вашем методе входа в систему (/ session / create?) Сделать это:

# this should take you back /articles/new,
# you may have to move your call to store_location 
# or manually set session[:return_to]
redirect_back_or_default 

Затем в ArticlesController# new

def new
  @article = Article.new(session[:article] || {})
end

Тогда сохраненные параметры статьи из сеанса все еще там, поэтому форма предварительно заполнена.

Будьте осторожны, сохраняя слишком много контента в сеансе.В Rails хранилищем сеансов по умолчанию является cookie-файл, а cookie-файлы содержат только около 4 тыс. Данных.Возможно, вам придется изменить хранилище сессий, чтобы выполнить это.

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