2010-05-12 39 views
1

我们有一个表单,用于在我们的views/restaurants/show.html.erb中提交某家餐馆的评级。我们只希望登录用户创建新的评分。我们把身份验证后不必要的重定向

的before_filter:login_required,:只=> [:新:创建]:我们RatingsController的顶部

(但我们也只尝试 “创造”)。如果我们在输入评分详情后点击提交按钮,我们会提示登录(这是我们想要的)。填写用户名和密码并提交登录表单后,我们将重定向回e。 G。/restaurants/36/ratings,但我们希望重定向到我们来自的地方 - e。 G。 /餐厅/ 36 /。我们尝试了redirect_to(:back),但是这会将我们重定向回登录表单。此外,新评级不会保存到数据库。

任何想法如何改变重定向以及如何确保评分得到保存?

谢谢!

+0

你俩有没有想出解决办法? – 2010-05-18 21:50:11

回答

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。我想你可以根据你的需要调整想法。

我觉得我得到了这个职位这种想法的一部分:http://www.urubatan.info/2007/10/a-very-simple-login-example-with-rails/

相关问题