我是新来ruby的。我在user.rb中遇到一个名称错误
NameError - undefined local variable or method `favorites' for #<User:0x007fc0e19a8720>:
activemodel (4.0.5) lib/active_model/attribute_methods.rb:439:in `method_missing'
activerecord (4.0.5) lib/active_record/attribute_methods.rb:167:in `method_missing'
app/models/user.rb:17:in `favorited'
app/views/favorites/_favorite.html.erb:2:in `_app_views_favorites__favorite_html_erb__4203159933335848505_70233146456940'这是我的user.rb文件:
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable, :confirmable
has_many :posts, dependent: :destroy
has_many :comments
has_many :votes, dependent: :destroy
has_many :users, dependent: :destroy
mount_uploader :avatar, AvatarUploader
def role?(base_role)
role == base_role.to_s
end
def favorited(post)
favorites.where(post_id: post.id).first
end
end这是我的favorite.rb文件:
类收藏夹< ActiveRecord::Base
has_many :users, dependent: :destroy
has_many :posts, dependent: :destroy结束
我不明白为什么我得到了名称错误。
发布于 2014-09-23 03:51:30
您的错误为:
NameError - undefined local variable or method `favorites' for #<User:0x007fc0e19a8720>换句话说,它告诉您正在User实例上调用方法favorites,而该方法没有为该对象类型定义。
考虑到您的user.rb文件既没有用户-收藏夹关联(它会自动为您创建该方法),也没有显式的def favorites方法,这是有意义的。要避免此错误,您需要一个或另一个。
我同意维姆沙的建议--这看起来像是一个关联,对于这种关联,您最好使用Rails的内置关联方法(可能是has_many :favorites),而不是自己编写关联的方法。
https://stackoverflow.com/questions/25981840
复制相似问题