我正在使用带有rails的Devise,我想添加一个方法“getAllComments”,所以我写这个:
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
# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation, :remember_me, :city, :newsletter_register, :birthday, :postal_code,
:address_complement, :address, :lastname, :firstname, :civility
has_many :hotels_comments
class << self # Class methods
def getAllComments
true
end
end
end
在我的控制器中:
def dashboard
@user = current_user
@comments = @user.getAllComments();
end
当我去我的网址时,我得到了
undefined method `getAllComments' for #<User:0x00000008759718>
我做错了什么?
谢谢
答案 0 :(得分:9)
因为getAllComments
是一个类方法,并且您尝试将其作为实例方法进行访问。
您需要以下列方式访问它:
User.getAllComments
或将其重新定义为实例方法:
class User < ActiveRecord::Base
#...
def getAllComments
true
end
end
def dashboard
@user = current_user
@comments = @user.getAllComments
end
答案 1 :(得分:1)
正如我所看到的,你将getAllComments作为类方法添加到eigenclass中。并且您尝试从实例调用此方法。
答案 2 :(得分:0)
class << self
的内容表示类方法。它可以缩短为def self.getAllComments
您应该将其称为User.getAllComments
而不是@user.getAllComments
答案 3 :(得分:0)
您编写的getAllComments()方法是类方法
所以调用方法的正确方法是
@comments = User.getAllComments
但是如果你真的想将getAllComments的范围扩展到当前用户,我建议你编写一个实例方法
class User < ActiveRecord::Base
..
def getAllComments
// comments implementation
end
这样你可以像这样访问getAllComments方法:
@user = current_user
@comments = @user.getAllComments