has_many通过has_one
我有两个模型,Conversation
和Message
,和一个关注Conversible
。 A Conversible
有一个Conversation
和一个Conversation
有很多Message
的。我想设置Conversible
,所以我可以在我的Conversible
上拨打messages
,它将返回Message
的Conversation
。这是我到目前为止: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
的关系。
我错过了什么?
看起来你并不需要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
对不起,我应该提到这是一个更大项目的样本。我们在应用程序中有多个模型,其中将包括'可转换的'以及其他将被添加到该问题中的方法。 – LandonSchropp 2014-09-04 23:29:58
使用'as'修复了一个错误,但它没有解决问题。 – LandonSchropp 2014-09-04 23:33:06
你的意思是第二个变体不起作用吗? – IS04 2014-09-05 06:07:37
你在哪里包含模块'Conversible'? – IS04 2014-09-04 19:14:23
我们有四个其他模型,包括'可转换的'。例如,有一个“目标”模型应该有一个“对话”。我离开他们试图保持简单的问题。 – LandonSchropp 2014-09-04 23:29:35