Rails 3: Ошибка при доступе к атрибуту модели Active Record - PullRequest
0 голосов
/ 16 марта 2011

У меня есть модель ' car ', которая является ActiveRecord:

class Car < ActiveRecord::Base
 ...
end

В таблице car в DB есть столбец с именем ' available ', в котором хранится логическое значение. Я пытаюсь получить доступ к этому значению в классе модели, например:

class Car < ActiveRecord::Base
 ...
 if self.avaliable #error msg: undefined method 'available'

 end 
end

но я получил сообщение об ошибке " неопределенный метод 'доступен' ", почему? как получить доступ к этому атрибуту модели автомобиля?

Ответы [ 3 ]

1 голос
/ 16 марта 2011

available (а не avaliable, как вы написали в self.avaliable) - это методы экземпляра, и вы не можете получить доступ к методу экземпляра из класса.

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

Теперь вопрос: что вы пытаетесь сделать? Возможно, мы сможем дать лучший ответ, если вы сообщите нам, что вы пытаетесь сделать.

0 голосов
/ 16 марта 2011

Если вы вызываете этот self.available из метода класса, то сначала вам нужно создать объект @car класса Car, затем вы можете легко вызвать @ car.available.

В противном случае, если вы вызываете метод экземпляра класса, и вызывающий объект доступен там, тогда сработает self.available.

Для большей ясности по методам класса, по сравнению с методом экземпляра и как их вызывать смотрите здесь. http://railstips.org/blog/archives/2009/05/11/class-and-instance-methods-in-ruby/

0 голосов
/ 16 марта 2011

Вы не можете написать код ruby ​​inline в теле класса, вы должны обернуть его

if self.avaliable #error msg: undefined method 'available'

end 

как метод.И вы можете позвонить в before_filter

class Car < ActiveRecord::Base
  before_filter :check_avaliable

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