2015-01-16 3 views
2

Я пытаюсь выяснить, если есть один вкладыш, чтобы проверить, если пара находится в HABTMMongoid выбор HABTM

Conversation.in (participant_ids: [current_user.id, Params [: recipient_id]]) .first_or_create

Так что в принципе мне нужно проверить, существует ли уже пара [Sender, Receiver] или [Receiver, Sender]. Если да, верните идентификатор беседы. Если нет, создайте его.

Я пробовал .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

Пожалуйста, включите образцы документов. Пожалуйста, также включите все, что вы пробовали, и что не работает. – wdberkeley

+0

вы также можете использовать 'document # first_or_initialize' вместо проверки на' nil? ' –

ответ

0

Вы получили 2 возможности

scope :pair_exists, ->(pair){ where(:participant_ids.sort => pair.sort) }

def self.pair_exists?(pair) where(:participant_ids.sort => pair.sort) end

Смежные вопросы