Как добавить пользовательский атрибут в модель - PullRequest
0 голосов
/ 09 декабря 2010

Я добавляю атрибут ": foo" к моей модели пользователя как:

attr_accessor :foo
attr_accessible :foo

Но когда я устанавливаю этот атрибут из контроллера сеанса или любого другого контроллера как:

User.foo = "my attributre"

и я получаю этот атрибут как:

User.foo

так что они не распознаются и выдают мне ошибку, которая:

undefined method `foo=' for #<Class:0xb75366fc>

Так что, пожалуйста, помогите здесь. Я использую рельсы 2.3.5

Ответы [ 2 ]

5 голосов
/ 09 декабря 2010

attr_accessor не создает метод класса, он создает методы экземпляра.Поэтому, учитывая ваш код, он должен работать так:

@user = User.new
@user.foo = "bar"

Редактировать:

Однако, если вы хотите создать пользовательские методы, вы можете сделать что-то вроде этого:

class User < ActiveRecord::Base

  def self.add_accessor(attr)
    define_method(attr) do  
      instance_variable_get("@#{attr}")
    end        

    define_method("#{attr}=") do |val| 
      instance_variable_set("@#{attr}",val)
    end
  end

А потом вы звоните с контроллера:

User.add_accessor "foo"
@user = User.new
@user.foo = "bar"
3 голосов
/ 09 декабря 2010

Попробуйте, если хотите иметь атрибут accesor на уровне класса. В пользовательской модели используйте этот код

 class << self
      attr_accessor :foo
    end

Дополнительная ссылка http://apidock.com/rails/Class/cattr_accessor

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...