我想弄清楚是否有一个班轮来检查是否有一对在habtm
Conversation.in(participant_ids:[current_user.id,params [:recipient_id]])。first_or_create
所以基本上我需要检查一对[发送者,接收者]或[接收者,发送者]是否已存在。如果是,请返回会话ID。如果没有,请创建一个。
我试过.in和.where,但它们并不是一直都在工作。有什么想法吗?
class Conversation
include Mongoid::Document
include Mongoid::Timestamps
has_and_belongs_to_many :participants, :class_name => 'User'
embeds_many :messages
end
def create
@conversation = Conversation.any_of({participant_ids: [current_user.id, params[:recipient_id]]},
{participant_ids: [params[:recipient_id], current_user.id]}).first
if @conversation.nil?
@conversation = Conversation.create(participant_ids: [current_user.id, params[:recipient_id]])
end
render json: { conversation_id: @conversation.id.to_s }
end
所以这就是我所使用的模型和方法,但似乎应该有一种更简单的方法来实现这一点。
答案 0 :(得分:0)
你有两种可能性
scope :pair_exists, ->(pair){ where( :participant_ids.sort => pair.sort ) }
def self.pair_exists?(pair)
where(:participant_ids.sort => pair.sort)
end