A character has_many :conversations, through: :chats, and each conversation
has_many :characters, through: :chats.
*character.rb*
has_many :chats, foreign_key: "character_id", dependent: :destroy
has_many :conversations, through: :chats, source: :conversation
has_many :messages
*conversation.rb*
has_many :chats, foreign_key: "conversation_id", dependent: :destroy
has_many :characters, through: :chats, source: :character
has_many :messages
*chat.rb*
belongs_to :character
belongs_to :conversation
*messages_controller.rb*
def create
@sender = Character.find_by(callsign: params[:callsign])
@recipient = Character.find_by(callsign: params[:recipient])
# 1
@senderConversations = @sender.conversations
# 2
@senderAndRecipientConversations = @senderConversations.joins(:
characters).where(characters: {id: @recipient.id}) # works fine up to here
# 3
@conversationAssociation = @senderAndRecipientConversations.joins(:
characters).group('conversations.id').having('count(characters.id) = ?', 2) #
problem line!
@conversation = @conversationAssociation.first
if(@conversation.nil?)
@conversation = @sender.conversations.create
@recipient.conversations << @conversation
end
@message = @sender.messages.build(message_params.merge(:conversation
=> @conversation))
if @message.save
@conversation.messages << @message
respond_to do |format|
format.html do
end
format.js do
end
end
else
redirect_to request.referrer || root_url
end
end
All conversations must have at least two characters, and some conversations
may have more than two characters (group chats).
I'm trying to construct a 3-step query that first finds all the @sender's
conversations, then selects from these the ones that also involve the
@recipient, and finally chooses the conversation which only involves
@sender and @recipient and no other characters.
The first two steps are working fine. I can't get the code for the third
step right. The best I've managed is:
@senderAndRecipientConversations.joins(:characters).group(
'conversations.id').having('count(characters.id) = ?', 2)
What's wrong with this code?
--
You received this message because you are subscribed to the Google Groups "Ruby
on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/rubyonrails-talk/36c222f4-4924-488b-a6ca-dca784f57182%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.