0

我完全按照寶石的說明 - 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:如果我去我創建了一個用戶的URL輪廓,例如localhost:3000/test我看到下面的錯誤,這導致我相信寶石的一部分正在工作,因爲它實際上提取了正確的記錄。但是別的東西被打破了。

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

你能否證實它在你的Gemfile,你已經運行'束install'? –

+0

@ Jesse-Wolgamott我已經完成了這兩件事,我甚至用我的Gemfile更新了這個問題。 – marcamillion

+0

我想知道如果虛榮表有一些不規則的條目。你能清除它,還是驗證它只有你所期望的? –

回答

1

我試着在我結束重複這個問題,我似乎無法得到它的複製,這意味着它可能是獨有的東西到你的應用程序,可能會造成問題。

您可以參考https://github.com/jaustinhughey/vtest作爲一個工作示例。

我發現你的問題有趣的是這樣的:

爲#< 類未定義的局部變量或方法`has_vanity」:0x000001015691e8>

難道不應該是 「用戶」,而不是「類」?作爲一種可用的方法,Vanities通過將對象和虛榮的多態關聯推入ActiveRecord而起作用。然後,您只需調用「has_vanity」即可自動爲您提供該多態關聯。這是一種簡單的方式,它只是一種捷徑,真的。

我想知道是否有其他的「時髦」,正在做到/與ActiveRecord在你的情況。我不確定具體是什麼會導致這種情況,但出於某種原因,您的情況下該用戶對象不存在該方法。

作爲變通,您可以嘗試在地方調用「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 
+0

這個解決方法效果很好。出於好奇,一旦我去'localhost.com/test',它會重定向到'localhost.com/users/1'。那是預期的行爲,還是別的東西在瘋狂?如果這是預期行爲,我如何才能將其變爲永久URL(即'localhost.com/test'並保持這種狀態)?謝謝。 – marcamillion

+0

是的,這是預期的行爲。如果你想讓它保持/測試,你可以改變vanities_controller.rb來渲染你想要的任何視圖,而不是執行重定向。 –

+0

啊,有趣...好吧,會玩弄它。謝謝! – marcamillion

相關問題