我是一个相当新的人,当我在我正在处理的应用程序中取得进展时,我遇到了一个问题。
我设置了以下关系
游戏
belongs_to :challenge
has_many :game_players, through: :playersessions, source: :user
has_many :playersessions
挑战
has_many :phrases
has_many :games
短语
has_many :playedphrases
has_many :playersessions, through: :playedphrases
playedphrase
belongs_to :playersession
belongs_to :phrase
playersession
has_many :playedphrases
has_many :phrases, through: :playedphrases
所有这些关系都在我的程序中运行,但我需要开始进行更高级的查询。例如,我想找到其余的短语。在英语中,它将会发现这个游戏的挑战短语并删除这个游戏的Playersession的短语"。我认为问题在于@ game.challenge.phrases返回Phrase对象,并且必须迭代@ game.playersessions以查找所有短语对象。
有关如何处理此类查询的任何指导?如果有任何其他信息有帮助,请告诉我。
答案 0 :(得分:0)
我终于想出了一种方法来完成这项工作 - 我不知道它是否是最雄辩的红宝石,但它确实有效。
def determine_remaining_phrases
remain = @game.challenge.phrases
@playersessions.each do |session|
remain -= session.phrases
end
return remain
end
基本上我需要遍历playeressions并删除每个传递的相关短语。这给我留下了一系列短语对象。如果有人有更有说服力的答案,请告诉我。