首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过has_one执行has_many

通过has_one执行has_many
EN

Stack Overflow用户
提问于 2014-09-05 00:54:11
回答 1查看 271关注 0票数 0

我有两个模型,ConversationMessage,一个与Conversible有关。一个Conversible有一个Conversation,一个Conversation有多个Message。我想设置Conversible,这样我就可以在我的Conversible上调用messages,它会返回MessageConversation。以下是我目前所拥有的:

代码语言:javascript
复制
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的关系。

我遗漏了什么?

EN

回答 1

Stack Overflow用户

发布于 2014-09-05 03:19:38

看起来你不需要Conversible模块:

代码语言:javascript
复制
class Conversation < ActiveRecord::Base
  belongs_to :conversible, polymorphic: true
  has_many :messages, dependent: :destroy
end

class Message < ActiveRecord::Base
  belongs_to :conversation
end

然后,如果您需要Conversation的一些关系,您可以这样写:

代码语言:javascript
复制
class Post < ActiveRecord::Base
  has_many :conversations, as: :conversible
end

或者,您可以尝试如下所示:

代码语言:javascript
复制
module Conversible
  extend ActiveSupport::Concern

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

然后:

代码语言:javascript
复制
class Post < ActiveRecord::Base
  include Conversible
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25671024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档