2014-09-04 134 views
0

我有兩個模型,ConversationMessage,和一個關注Conversible。 A Conversible有一個Conversation和一個Conversation有很多Message的。我想設置Conversible,所以我可以在我的Conversible上撥打messages,它將返回MessageConversation。這是我到目前爲止:has_many通過has_one

module Conversible 
    extend ActiveSupport::Concern 

    included do 
    has_one :conversation, as: :conversible dependent: :destroy 
    has_many :messages, through: :conversation 
    end 
end 

class Message < ActiveRecord::Base 
    belongs_to :conversation 
end 

class Conversation < ActiveRecord::Base 
    belongs_to :conversible, polymorphic: true 
    has_many :messages, dependent: :destroy 
end 

不幸的是,這是行不通的。我可以撥打conversible.messages,但它總是返回一個空關係,即使conversible.conversation.messages返回與其Message的關係。

我錯過了什麼?

+0

你在哪裏包含模塊'Conversible'? – IS04 2014-09-04 19:14:23

+0

我們有四個其他模型,包括'可轉換的'。例如,有一個「目標」模型應該有一個「對話」。我離開他們試圖保持簡單的問題。 – LandonSchropp 2014-09-04 23:29:35

回答

0

看起來你並不需要Conversible模塊:

class Conversation < ActiveRecord::Base 
    belongs_to :conversible, polymorphic: true 
    has_many :messages, dependent: :destroy 
end 

class Message < ActiveRecord::Base 
    belongs_to :conversation 
end 

,然後如果你需要Conversation有一定的關係,你可以寫:

class Post < ActiveRecord::Base 
    has_many :conversations, as: :conversible 
end 

,或者你可以嘗試像:

module Conversible 
    extend ActiveSupport::Concern 

    included 
    has_one :conversations, as: :conversible 
    has_many :messages, through: :conversations 
    end 
end 

然後:

class Post < ActiveRecord::Base 
    include Conversible 
end 
+0

對不起,我應該提到這是一個更大項目的樣本。我們在應用程序中有多個模型,其中將包括'可轉換的'以及其他將被添加到該問題中的方法。 – LandonSchropp 2014-09-04 23:29:58

+0

使用'as'修復了一個錯誤,但它沒有解決問題。 – LandonSchropp 2014-09-04 23:33:06

+0

你的意思是第二個變體不起作用嗎? – IS04 2014-09-05 06:07:37