私は次のモデルを持っています:
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
しかし、からその surveys_taken 関連付けにアクセスできませんSurveyTaking.last_survey_taken
。