2010-05-12 2 views
1

У нас есть форма для отправки оценок для определенного ресторана в наших представлениях/ресторанах/show.html.erb. Мы только хотим, чтобы пользователи регистрировались в новых рейтингах. СтавимНежелательное перенаправление после аутентификации

before_filter: login_required,: только => [: новый,: создать]

(но мы также пытались только ": создать") в верхней части нашего RatingsController. Если мы нажмем кнопку «Отправить» после ввода сведений о рейтинге, нам будет предложено войти (это то, что мы хотим). После заполнения имени пользователя и пароля и отправки формы входа мы перенаправляем обратно на e. г./restaurants/36/ratings, но мы хотим быть перенаправлены обратно туда, откуда мы пришли - e. г./Рестораны/36 /. Мы попробовали redirect_to (: назад), но это перенаправляет нас обратно в форму входа. Также новый рейтинг не сохраняется в базе данных.

Любая идея, как мы можем изменить перенаправление и как убедиться, что рейтинг сохраняется?

Спасибо!

+0

ли вы, ребята, когда-нибудь это цифра? –

ответ

1

Отказ от ответственности: Я не использую restful-authentication. (Вы можете посмотреть в authlogic, если у вас есть выбор - есть Railscast about it, если вы хотите войти в него.) Тем не менее, сохранение значения «назад» в сеансе должно продолжаться. Вот что я делаю в моей ситуации:

# app/controllers/application.rb 

before_filter :authorize 

protected 

    # Override in controller classes that should NOT require authentication (such as logging in, by definition) 
    def require_login? 
    return true 
    end 

private 

    def authorize 
    if require_login? && current_user.nil? 
     session['return_to'] = request.request_uri 
     redirect_to login_url 

     return false 
    end 
    end 

# app/controllers/user_sessions_controller.rb 

def create 
    # [...] 

    if @user_session.save 
    flash[:notice] = 'Successfully logged in.' 

    if session['return_to'].nil? 
     redirect_to root_url 
    else 
     redirect_to session['return_to'] 
    end 
    else 
    render :action => 'new' 
    end 
end 

# app/controllers/users_controller.rb 

# Just as an example: 
def require_login? 
    return case action_name 
    when 'new' 
    false 
    when 'create' 
    false 
    else 
    true 
    end 
end 

Мое приложение требует почти каждое действие требует аутентификации, поэтому у меня есть require_login? возвращение true. Я думаю, вы можете настроить идею session['return_to'] в соответствии с вашими потребностями.

Я думаю, что я получил часть этой идеи из этого поста: http://www.urubatan.info/2007/10/a-very-simple-login-example-with-rails/

Смежные вопросы