Драгоценный камень тщеславия выдает ошибку на моей модели пользователя - PullRequest
0 голосов
/ 08 сентября 2011

Я отлично следовал инструкциям для драгоценного камня - 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, я вижу следующую ошибку, которая заставляет меня поверить, что эта часть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 Ответ

1 голос
/ 08 сентября 2011

Я пытался продублировать эту проблему с моей стороны, и я не могу заставить ее дублировать, то есть, возможно, это что-то уникальное для вашего приложения, которое может вызывать проблему.

Вы можетессылка https://github.com/jaustinhughey/vtest для рабочего примера.

Что мне интересно в вашей проблеме, так это:

неопределенная локальная переменная или метод has_vanity для # <<strong> Class : 0x000001015691e8>

Разве это не должно быть "Пользователь", а не "Класс"?Тщеславие работает, выдвигая полиморфную ассоциацию для объекта и тщеславие в ActiveRecord как доступный метод.Затем вы просто вызываете «has_vanity», чтобы автоматически получить эту полиморфную ассоциацию для вас.Это упрощенный способ получить его там - только ярлык, на самом деле.

Мне интересно, есть ли еще что-то «напуганное», которое делается с / с 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
...