1

我们在views/restaurants/show.html.erb 中有一个表格可以提交某家餐厅的评分。我们只希望登录用户创建新评级。我们把

before_filter :login_required, :only => [ :new, :create ]

(但我们也只尝试了“:create”)在我们的 RatingsController 之上。如果我们在输入评分详细信息后单击提交按钮,系统会提示我们登录(这是我们想要的)。在填写用户名和密码并提交登录表单后,我们会被重定向回例如 /restaurants/36/ratings,但我们希望被重定向回我们原来的位置 - 例如 /restaurants/36/。我们尝试了redirect_to(:back),但这会将我们重定向回登录表单。此外,新评级也不会保存到数据库中。

知道我们如何更改重定向以及如何确保评分被保存吗?

谢谢!

4

1 回答 1

1

免责声明: 我不使用restful-authentication. (authlogic如果你有选择的话,你可能会考虑一下——如果你想要一个介绍,有一个Railscast 关于它。)即便如此,在会话中存储“返回”值应该仍然有效。这是我在我的情况下所做的:

# 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?return的原因true。我认为您可以session['return_to']根据自己的需要调整想法。

我想我从这篇文章中得到了这个想法的一部分: http ://www.urubatan.info/2007/10/a-very-simple-login-example-with-rails/

于 2010-05-12T15:01:54.833 回答