Sql Rails:如何从何处获取模型;join_table.attrbute=x";加入了,但也加入了其他所有人

Sql Rails:如何从何处获取模型;join_table.attrbute=x";加入了,但也加入了其他所有人,sql,ruby-on-rails,ruby,postgresql,activerecord,Sql,Ruby On Rails,Ruby,Postgresql,Activerecord,我有一个模型公司,还有一个加入模型备注,它有用户id和公司id。这家公司有很多钞票。注释属于用户和公司。我试图为一个用户(如果有的话)获取一个公司列表和注释,但也要获取所有其他公司的注释 显然,执行Company.joins(:notes).where(“notes.user_id=1”)只能获取那些有注释的,而不是其他的。我在这里遗漏了什么?Rails 4: Company.joins('LEFT JOIN notes ON companies.id = notes.company_id')

我有一个模型
公司
,还有一个加入模型
备注
,它有
用户id
公司id
。这家公司有很多钞票。注释属于用户和公司。我试图为一个用户(如果有的话)获取一个公司列表和注释,但也要获取所有其他公司的注释

显然,执行
Company.joins(:notes).where(“notes.user_id=1”)
只能获取那些有注释的,而不是其他的。我在这里遗漏了什么?

Rails 4:

Company.joins('LEFT JOIN notes ON companies.id = notes.company_id')
:

你需要做一个测试。这将保留表1(公司)中的所有记录,即使它们没有任何东西可以加入表2(注释)

有两种方法可以按用户进行筛选

  • 添加where子句。这需要有一个条件,通过检查一个空的用户id,当公司没有便笺时

    where(notes: {user_id: [@user.id, nil]})
    
  • 将条件添加到外部联接。不需要进行NULL检查,因为左连接仍将返回任何NULL

    注意:需要对输入(
    @user.id
    )进行消毒或信任

    joins("LEFT JOIN notes ON companies.id = notes.company_id AND notes.user_id = #{@user.id}")
    

  • 谢谢你的解释。回答得很好。
    joins("LEFT JOIN notes ON companies.id = notes.company_id AND notes.user_id = #{@user.id}")