Получено отношение ActiveRecord, но нужен объект

#ruby-on-rails #ruby #lazy-loading

#ruby-on-rails #ruby #отложенная загрузка

Вопрос:

я написал следующие классы:

 class Occupation < ActiveRecord::Base
  has_many :pref_labels
  has_many :cv_occupations
  has_many :cvs, :through => :cv_occupations
  validates_uniqueness_of :uri

  # This function will return the specified label for the given language.
  def label(language = Language.find_or_create_by_code(:en))
    self.pref_labels.where("language_id = #{language.id}")
  end
end

class PrefLabel < ActiveRecord::Base
  belongs_to :language
  belongs_to :concept
  belongs_to :skill
  belongs_to :occupation
  validates_uniqueness_of :value, :scope => [:language_id, :value]
  validates_uniqueness_of :language_id, :scope => [:language_id, :value]
end
  

На мой взгляд, я вызываю следующее: %td= занятие.метка (@language)
но это возвращает как ошибка :

 undefined method `value' for #<ActiveRecord::Relation:0x80c8368>
  

Как я могу вернуть фактический объект вместо отношения? Я знаю, что это как-то связано с отложенной загрузкой….

Комментарии:

1. опубликуйте также код действия контроллера

Ответ №1:

Изменить

 self.pref_labels.where("language_id = #{language.id}")
  

Для

 self.pref_labels.where("language_id = #{language.id}").all #or .first if you only one the first one
  

Комментарии:

1. в Rails 4 .all теперь также есть отношение. .first все еще работает, хотя