0

セッション用にデバイスコントローラーを拡張しました。ユーザーがログインするときにいくつかの機能を追加します。ログイン時に、ユーザー名またはパスワードが入力されていない場合、エラーが発生します:SessionsController#create

nilのIDと呼ばれます。これは誤って4になります。本当にnilのIDが必要な場合は、object_idを使用してください。

私は先週最大2時間検索しましたが、これを修正する方法は誰かがこれを手伝ってくれるでしょうか?高く評価されます

カスタム機能を正しく追加しながら、Deviseの作成アクションを保持するにはどうすればよいですか?

class SessionsController < Devise::SessionsController

  def create

    @user = User.where(:id => current_user.id).first
    @moderated = Asset.where(:attachable_id => current_user.id, :moderated => true).first

    if @user.sign_in_count.to_i == 1
      def after_sign_in_path_for(resource)
        "/welcome/basics"
      end
    else
      if @moderated.nil?
        unless @user.has_photo?
          def after_sign_in_path_for(resource)
          "/home/no_photo"
          end
        end
      else
        def after_sign_in_path_for(resource)
          "/home/moderated"
        end
      end
    end
  end
end
4

1 に答える 1

3

追加機能が、最初のログイン時にユーザーを別のページにリダイレクトすることで構成されている場合は、 wikiafter_sign_in_path_forで提案されているようにアプリケーションコントローラーで定義することをお勧めします。

class ApplicationController < ActionController::Base

  private

  def after_sign_in_path_for(resource)
    if current_user.sign_in_count == 1
      "/welcome/basics"
    else
      "/other/path"
    end
  end

end

これは、ユーザーがアプリケーションにサインインできる唯一のリソースである場合にのみ機能することに注意してください。それ以外の場合は、リソースパラメータを介してこのメ​​ソッドでも区別する必要があります。

于 2012-04-04T15:25:48.250 に答える