我是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
这是我最喜欢的.rb文件:
class Favorite&lt;的ActiveRecord ::基
has_many :users, dependent: :destroy
has_many :posts, dependent: :destroy
端
我不明白为什么我会收到名称错误。
答案 0 :(得分:3)
您的错误显示为:
NameError - undefined local variable or method `favorites' for #<User:0x007fc0e19a8720>
换句话说,它告诉您正在favorites
实例上调用方法User
,并且没有为该对象类型定义该方法。
根据您的user.rb
文件,它既没有用户收藏夹关联(可以自动为您创建该方法),也没有明确的def favorites
方法,这是有意义的。要避免此错误,您需要一个或另一个。
我同意Vimsha的建议 - 这看起来像一个关联,你最好使用Rails的内置关联方法(可能是has_many :favorites
)而不是自己编写该关联的方法。