NameError - 未定义的局部变量或方法`favorites'

时间:2014-09-22 19:34:38

标签: ruby-on-rails

我是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

我不明白为什么我会收到名称错误。

1 个答案:

答案 0 :(得分:3)

您的错误显示为:

NameError - undefined local variable or method `favorites' for #<User:0x007fc0e19a8720>

换句话说,它告诉您正在favorites实例上调用方法User,并且没有为该对象类型定义该方法。

根据您的user.rb文件,它既没有用户收藏夹关联(可以自动为您创建该方法),也没有明确的def favorites方法,这是有意义的。要避免此错误,您需要一个或另一个。

我同意Vimsha的建议 - 这看起来像一个关联,你最好使用Rails的内置关联方法(可能是has_many :favorites)而不是自己编写该关联的方法。