【问题标题】:rails join on association and idrails join on association 和 id
【发布时间】:2014-02-24 11:12:08
【问题描述】:

我想在 SQL 上实现只需要 3 秒的时间,我为此苦苦挣扎了好几个小时,我想加载所有记录并离开连接(如果存在),如果不存在,则不要给我相关的型号。

我要创建的查询如下:

"SELECT * FROM apartments LEFT JOIN comments ON apartments.id = comments.apartment_id AND comments.user_id = ?"

当我调用 apartment.cmets 时,它只会给我特定用户的记录(只能是一个),而不是每个用户的所有记录。

我试过了

Apartment.joins("LEFT OUTER JOIN comments ON comments.apartment_id = apartments.id AND comments.user_id = #{user_id}") 

但它不起作用,因为当我调用 apartments.cmets 时,它会触发另一个查询,该查询返回所有可能的 cmets。

Apartment.includes(:comments).where("comments.user_id = ?", user_id) 

也不行,因为它只返回有特定用户评论的公寓。

需要帮助!

【问题讨论】:

  • 您的代码中有很多错误。没有 table_name 的 LEFT JOIN ON 是什么?为什么这里的表名不同:LEFT OUTER JOIN trip_items ON comments.?
  • 你是正确的,固定的。我复制粘贴并更改名称以使其更易于理解

标签: ruby-on-rails activerecord rails-activerecord


【解决方案1】:

也许你可以试试这个:

#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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-22
    • 2017-03-24
    • 2012-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多