Ruby跨多个表的高级活动记录查询

时间:2014-08-21 22:11:04

标签: mysql ruby activerecord

我是一个相当新的人,当我在我正在处理的应用程序中取得进展时,我遇到了一个问题。

我设置了以下关系

游戏

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以查找所有短语对象。

有关如何处理此类查询的任何指导?如果有任何其他信息有帮助,请告诉我。

1 个答案:

答案 0 :(得分:0)

我终于想出了一种方法来完成这项工作 - 我不知道它是否是最雄辩的红宝石,但它确实有效。

       def determine_remaining_phrases
            remain = @game.challenge.phrases

            @playersessions.each do |session|
                remain -= session.phrases
            end

            return remain
        end

基本上我需要遍历playeressions并删除每个传递的相关短语。这给我留下了一系列短语对象。如果有人有更有说服力的答案,请告诉我。