我希望在SQL上实现完全花费3秒的时间,并且我正在努力工作几个小时,我想加载所有记录并保留连接(如果存在),如果不存在,那么就不要给我关联模型。
我想要创建的查询如下:
"SELECT * FROM apartments LEFT JOIN comments ON apartments.id = comments.apartment_id AND comments.user_id = ?"
当我打电话给apartment.com时,它会给我一个特定用户的记录(只能是一个),而不是每个用户的所有记录。
我试过
Apartment.joins("LEFT OUTER JOIN comments ON comments.apartment_id = apartments.id AND comments.user_id = #{user_id}")
但它不起作用,因为当我调用apartments.com时,它会触发另一个返回所有可能注释的查询。
Apartment.includes(:comments).where("comments.user_id = ?", user_id)
也不起作用,因为它只返回具有特定用户评论的公寓。
需要帮助!
答案 0 :(得分:0)
也许你可以试试这个:
#app/models/apartment.rb
Class Apartment < ActiveRecord::Base
has_many :comments
scope :user, ->(id) { where("comments.user_id = ?", id }
end
@apartment = Apartment.find(params[:id])
@comments = @apartment.comments.user(user_id)