1

私たちのviews/restaurants / show.html.erbに、特定のレストランの評価を送信するためのフォームがあります。ログインしたユーザーのみが新しい評価を作成する必要があります。入れます

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

(ただし、RatingsControllerの上に「:create」のみを試しました)。評価の詳細を入力した後に送信ボタンをクリックすると、ログインするように求められます(これが必要です)。ユーザー名とパスワードを入力してログインフォームを送信すると、たとえば/ restaurants / 36 / ratingsにリダイレクトされますが、元の場所(たとえば/ restaurants / 36 /)にリダイレクトされます。redirect_to(:back)を試しましたが、これによりログインフォームにリダイレクトされます。また、新しい評価はデータベースに保存されません。

リダイレクトを変更する方法と、評価が確実に保存されるようにする方法について何か考えはありますか?

ありがとう!

4

1 に答える 1

1

免責事項: 私は使用しませんrestful-authentication。(authlogic選択肢があるかどうかを調べることができます。イントロが必要な場合は、 Railscastがあります。)それでも、セッションに「back」値を格納してもうまくいくはずです。これが私の状況で私がすることです:

# 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 に答える