#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
все еще работает, хотя