我有模特:
用户
"App-Prefs:root=\(Bundle.main.bundleIdentifier!)"
UsersConversation
class User < ActiveRecord::Base
has_many :users_conversations, dependent: :destroy
has_many :conversations, through: :users_conversations, dependent: :destroy
end
会话
class UsersConversation < ActiveRecord::Base
belongs_to :conversation
belongs_to :user
end
我需要创建查询以通过其ID获取两个已知用户之间的联合对话。我有这个
class Conversation < ActiveRecord::Base
has_many :users_conversations, dependent: :destroy
has_many :users, through: :users_conversations
end
但它找到的对话是Conversation.left_joins(:users).where(users: { id: [current_user.id, params[:user_id]]}).first
中的任何一个,所以我总是得到相同的对话,[current_user.id, params[:user_id]]
,但这是错误的。我认为这是因为current_user
像OR一样工作,但我需要AND。谢谢。
答案 0 :(得分:0)
评论中提到的答案不正确。请不要参考。
尝试使用
Conversation.left_joins(:users).find_by("users.id IN(?)", [current_user.id, params[:user_id]]})
Haven实际上已经尝试过,但这应该可行。如果您遇到错误,请告诉我。
此外,请改用find_by
或Model.where(condition).first
。使用后者是铁轨中的坏习惯和惯例。
解释:当您必须找到字段与数组匹配的记录时,即您需要将此字段的值设置为数组时,应使用SQL的IN运算符。喜欢
SELECT * FROM Customers WHERE Country IN ('Germany', 'France', 'UK');