我完全遵循了宝石的说明 - 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'
答案 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