ruby-on-rails - 自定义 rails has_many 关联(通过 pg 数组)

标签 ruby-on-rails ruby ruby-on-rails-3

所以基本上我想知道是否有一些通用方法来定义自己的关联类型。 一些细节:

我有一个模型 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/

相关文章:

ruby-on-rails - Rails 中的用户到用户消息

ruby-on-rails - Rails 模型属于属于模型的模型,但我想使用另一个名称

ruby-on-rails-3 - SASS 与 Rails 3

ruby-on-rails - Rails 表单参数未保存到数据库

ruby-on-rails - 尝试访问相关记录时未定义的方法

ruby-on-rails - 在 Ruby on Rails 中持久化购物车

ruby-on-rails - 为什么要在 Rails 中使用 config.assets.prefix ?

css - 按时间更改背景图片网址

ruby - 在元素上调用方法时收到弃用警告 - 可以使用一些建议

ruby-on-rails - 基本的新 Action 测试 ActionController::TestCase