虚荣宝石在我的用户模型上抛出错误

时间:2011-09-08 02:56:08

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-plugins ruby-on-rails-3.1

我完全遵循了宝石的说明 - https://github.com/jaustinhughey/vanities - 其他一切工作正常。

但是当我尝试加载主页时,我收到了这个错误:

NameError in HomeController#index

undefined local variable or method `has_vanity' for #<Class:0x000001015691e8>
app/models/user.rb:2:in `<class:User>'
app/models/user.rb:1:in `<top (required)>'
app/controllers/home_controller.rb:3:in `index'

这是我的User.rb

class User < ActiveRecord::Base
        has_vanity

        has_many :feedbacks_as_poster, :foreign_key => :poster_id, :class_name => 'Feedback'
      has_many :feedbacks_as_receiver, :foreign_key => :receiver_id, :class_name => 'Feedback'


end
# == Schema Information
#
# Table name: users
#
#  id         :integer         not null, primary key
#  email      :string(255)
#  f_name     :string(255)
#  l_name     :string(255)
#  username   :string(255)
#  role_id    :integer
#  picture    :string(255)
#  about_me   :string(255)
#  website    :string(255)
#  created_at :datetime
#  updated_at :datetime
#

这是我的Home Controller

class HomeController < ApplicationController
  def index
        @users = User.all
        @feedback = Feedback.new
  end

end

思想?

编辑1:查看下面的Gemfile

source 'http://rubygems.org'

gem 'rails', '3.1.0'

gem 'execjs'
gem 'therubyracer'
gem 'vanities'

group :assets do
  gem 'sass-rails', "  ~> 3.1.0"
  gem 'coffee-rails', "~> 3.1.0"
  gem 'uglifier'
end

gem 'jquery-rails'    

group :development do
    gem 'sqlite3'
    gem 'annotate', :git => 'git://github.com/ctran/annotate_models.git'
end

group :test do
  gem 'turn', :require => false
end

group :production do    
    gem 'pg', :require => 'pg'
end

编辑2:如果我转到我创建的用户的网址配置文件,例如localhost:3000/test我看到以下错误,这使我相信gem的一部分正在工作,因为它实际上获取了正确的记录。但是其他一些东西被打破了。

Started GET "/test" for 127.0.0.1 at 2011-09-07 20:00:19 -0500
  Processing by VanitiesController#show as HTML
  Parameters: {"vname"=>"test"}
  Vanity Load (0.2ms)  SELECT "vanities".* FROM "vanities" WHERE "vanities"."name" = 'test' LIMIT 1
Completed 500 Internal Server Error in 100ms

NameError (undefined local variable or method `has_vanity' for #<Class:0x0000010313d478>):
  app/models/user.rb:2:in `<class:User>'
  app/models/user.rb:1:in `<top (required)>'
  app/controllers/vanities_controller.rb:8:in `show'

1 个答案:

答案 0 :(得分:1)

我试图在我的问题上复制这个问题,我似乎无法复制它,这意味着它可能是您的应用程序可能导致问题的独特之处。

您可以参考https://github.com/jaustinhughey/vtest作为工作示例。

我对你的问题感兴趣的是:

#&lt; Class 的未定义局部变量或方法`has_vanity':0x000001015691e8&gt;

不应该是“用户”,而不是“班级”吗?虚荣的作用是通过将对象和虚荣的多态关联推高到ActiveRecord作为可用方法。然后,您只需调用“has_vanity”即可自动为您提供该多态关联。这是一种简单的方式来实现它 - 只是一个捷径,真的。

我想知道在你的情况下是否还有其他“funky”正在使用ActiveRecord。我不确定具体会导致什么原因,但出于某种原因,在你的情况下,对于User对象来说,简单的方法是不存在的。

作为解决方法,您可以尝试添加以下代码来代替对“has_vanity”的调用:

class User < ActiveRecord::Base
  has_one :vanity, :as => :vain # instead of has_vanity

  has_many :feedbacks_as_poster, :foreign_key => :poster_id, :class_name => 'Feedback'
  has_many :feedbacks_as_receiver, :foreign_key => :receiver_id, :class_name => 'Feedback'
end