多个外键_ has_many

问题描述 投票:0回答:2

在Rails中,我需要一个模型来获得带有两个外键的has_many,这些外键需要匹配才能生成列表。

例如:

Organization_Profiles

表结构

id : int
profile_id : int
organization_id : int

协会

belongs_to: :profile
belongs_to: :organization
has_many: :notifications, foreign_keys: [:profile_id, :organization_id], dependent: :destroy

通知

表结构

id : int
profile_id : int
organization_id : int
level : int
message : string

协会

belongs_to: :profile
belongs_to: :organization

我怎样才能完成上述任务?根据我的研究,foreign_keys: []不存在。

ruby-on-rails ruby foreign-keys destroy
2个回答
0
投票

您可以在不依赖关联的dependent命令的情况下完成此操作。我能想到的最好的方法就是在采取行动解除ProfileOrganization的关系时“清理”这些关联。你可以在Organization中使用逆方法。

class Profile < ActiveRecord:Base

  def method_that_disassociates_from(inputted_organization)
    self.organizations.delete(inputted_organization)
    self.notifications.where(organization_id: inputted_organization.id).destroy_all
  end

end

1
投票

我想为我的应用程序的基本消息传递功能做类似的事情。

我有一个Conversation模型,其中包含user1_id和user2_id,每条消息都有一个user_id(用于发送者)和一个conversation_id(从中可以猜出收件人)。

理想情况下,我会写一些类似的东西:

  has_many :conversations, foreign_key: {:user1_id, :user2_id}, dependent: :destroy

我最终重新定义了自己的方法:

class User < ApplicationRecord
  after_destroy :delete_conversations

  def conversations
    Conversation.where('user1_id = :id OR user2_id = :id', id: id)
  end

  private

  def delete_conversations
    Conversation.where('user1_id = :id OR user2_id = :id', id: id).map(&:destroy)
  end
end
© www.soinside.com 2019 - 2024. All rights reserved.