0

current_userDevise経由でアクセスしようとすると...

def current_user 
    @user =  User.find(current_user.id)
    @user
end

そして、この RABL テンプレートを介して JSON で属性の一部をレンダリングします...

object @user
attributes :email, :username

このエラーが発生します...

SystemStackError at /api/current_user
stack level too deep

エラーは、この User モデル内の何かが原因であると思います。これを少し変更して Username フィールドに追加しました。この機能を追加するには、 Devise の指示に従いました...

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  attr_accessible :login, :username, :email, :password, :password_confirmation, :remember_me

  has_many :cart_items, dependent: :destroy

  # Virtual attribute for authenticating by either username or email
  # This is in addition to a real persisted field like 'username'
  attr_accessor :login

  def self.find_first_by_auth_conditions(warden_conditions)
      conditions = warden_conditions.dup
      if login = conditions.delete(:login)
        where(conditions).where(["lower(username) = :value OR lower(email) = :value", { :value => login.downcase }]).first
      else
        where(conditions).first
      end
  end

end
4

1 に答える 1

3

current_user 内から current_user を呼び出しています...

def current_user 
   @user =  User.find(current_user.id)

                          ^^^^

次に、自分自身を呼び出し、自分自身を何度も呼び出します...スタックオーバーフローが発生するまで

current_user メソッドを書き直す必要があるように思われるかどうかはわかりません。私の知る限り、Deviseはすでにそれを行っています。そのチュートリアルのどこに書き換えると書かれているのか教えてもらえますdef current_userか?

于 2013-09-04T00:54:23.823 に答える