1

ユーザーのサインアップ/インにdeviseを使用しています。ただし、ユーザーが公開されているアクセス可能なページからサインインすると、root_path へのリダイレクトを考案します。

私はこれを使用しようとしました:

def after_sign_in_path_for(resource)
 request.referrer
end

ユーザーがサインインしようとすると、「適切にリダイレクトされていません」というエラーが表示されます。

誰でもそれを行う方法を教えてもらえますか?

4

1 に答える 1

1

私が正しければ、あなたがやりたいことは、ユーザーがサインインするときにリダイレクトをオーバーライドすることだと思います。デバイスコントローラーを生成しcontrollers/devise/sessions_controller.rbていない場合は、デバイスコントローラーを生成します。それができたら、あなたはあなたの中に次のようなものを持ちたいと思うでしょうdevise/sessions_controller.rb

 def create
    self.resource = warden.authenticate!(auth_options)
    set_flash_message(:notice, :signed_in) if is_navigational_format?
    sign_in(resource_name, resource)
   # respond_with resource, :location => after_sign_in_path_for(resource)
    if current_user.role? :administrator
      redirect_to dashboard_path
    else
      redirect_to rota_days_path 
    end
  end

sessions_controller - create 上記の例では、メソッドは デフォルトで次のものを使用しています。# respond_with resource, :location => after_sign_in_path_for(resource)これはコメントアウトしています。current_users ロールが管理者であるかどうかを確認する if ステートメントを追加する。その場合、ダッシュボード ページにリダイレクトされます。そうでない場合は、勤務表ページにリダイレクトされます。

あるいは、devise ヘルパーは、次のようなこともできると述べています。

      def after_sign_in_path_for(resource)
       stored_location_for(resource) ||
         if resource.is_a?(User) && resource.can_publish?
           publisher_url
         else
           super
         end
     end

お役に立てれば。

アップデート

 def create
    @hospital_booking = HospitalBooking.new(params[:hospital_booking])

    respond_to do |format|
      if @hospital_booking.save
        format.html { redirect_to :back, notice: 'Photographer Shift was successfully created.' }
        format.json { render json: @hospital_booking, status: :created, location: @hospital_booking }
      else
        format.html { render action: 'new' }
        format.json { render json: @hospital_booking.errors, status: :unprocessable_entity }
      end
    end
  end

ここで何が起こるかというと、hospital_booking保存すると、別のページにリダイレクトするのではなく、問題のページにリダイレクトされます。ここでさらに読む:api Dock-redirect_to

于 2013-05-31T12:05:30.727 に答える