所以基本上我想知道是否有一些通用方法来定义自己的关联类型。 一些细节:
我有一个模型 conversations
有一个 PG 数组列 user_ids
.
因此,要检索我需要运行的用户对话:
select conversations.* from conversations where USER_ID = ANY(conversations.user_ids)
自 finder_sql
它的 friend 现在已被弃用,我真的很想知道实现这个伪 has_many 关联的最佳方法是什么?
目前我只使用如下方法:
def conversations
Conversation.where("#{id} = ANY (conversations.users)")
end
所以基本上我正在考虑实现我自己的 ActiveRecord::Associations::CollectionAssociation
并想知道是否有一些好的引用资料,或者您是否可以建议从哪里开始
最佳答案
我建议规范化你的模型,让另一个表保持用户和对话之间的关系,例如,构建一个模型
用户对话
你的关系将是
class User < ApplicationRecord
has_many :users_conversations, :dependent => :destroy
has_many :conversations, :through => :users_conversations
end
class Conversation < ApplicationRecord
has_many :users_conversations, :dependent => :destroy
has_many :users, :through => :users_conversations
end
那么你就可以轻松做到
#users for each specific conversation
@users = Conversation.find(1).users
#conversations for each specific user
@conversations = User.find(1).conversations
除非你想保持相同的方式或数组,否则你可以这样做
@users = User.where(:id => Conversation.find(1).user_ids)
如果 user_ids 存储为数组,如 [1,10,20] 因此,它将正常工作并返回用户
关于ruby-on-rails - 自定义 rails has_many 关联(通过 pg 数组),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13952744/