У меня есть следующие модели:
class User < ActiveRecord::Base
has_many :survey_takings
end
class SurveyTaking < ActiveRecord::Base
belongs_to :survey
def self.surveys_taken # must return surveys, not survey_takings
where(:state => 'completed').map(&:survey)
end
def self.last_survey_taken
surveys_taken.maximum(:position) # that's Survey#position
end
end
Цель состоит в том, чтобы иметь возможность звонить @user.survey_takings.last_survey_taken
с контроллера. (Это надумано, но продолжайте; общая цель - иметь возможность вызывать методы класса в @user.survey_takings
, которые могут использовать отношения в связанных опросах.)
В своем текущем виде этот код не будет работать; surveys_taken
сворачивает ActiveRelation в массив, когда я вызываю .map(&:survey)
. Есть ли способ вернуть отношение для всех объединенных опросов? Я не могу просто сделать это:
def self.surveys_taken
Survey.join(:survey_takings).where("survey_takings.state = 'completed'")
end
потому что @user.survey_takings.surveys_taken
присоединится к всем завершенным опросам_отчетов, а не только к завершенным опросам_тестирований для @user
.
Полагаю, что я хочу, это эквивалент
class User < ActiveRecord::Base
has_many :survey_takings
has_many :surveys_taken, :through => :survey_takings, :source => :surveys
end
но я не могу получить доступ к этой ассоциации surveyys_taken с SurveyTaking.last_survey_taken
.