如何使用联接查询Rails 5中的关联模型? 在查看文档和这个问题之后,我尝试过的是DoctorLocation.joins(:location).where(:location => {:confidence => 2}) 我究竟做错了什么? 我的查询未返回任何结果。

pry(main)> DoctorLocation.joins(:locations).where(:locations => {:confidence => 2})
=> #<DoctorLocation::ActiveRecord_Relation:0x3ff735a09d8c>

class DoctorLocation
   belongs_to :location

end

class Location
   has_many :doctor_locations, dependent: :destroy

end

移民

   create_table :doctor_locations do |t|
      t.integer :doctor_profile_id
      t.integer :location_id
      t.text :uuid
      t.timestamps null: false
    end


 create_table :locations do |t|
      t.string   :address
      t.integer  :ordinal, :default => 1
      t.integer  :doctor_profile_id
      t.text     :uuid
      t.timestamps
    end

 add_column :locations, :confidence, :integer

#1楼 票数:1 已采纳

您实际上有正确的查询。 而是您的测试方法已损坏。

class DoctorLocation < ApplicationRecord
  belongs_to :location
  def self.with_confidence(c)
    DoctorLocation.joins(:location).where(locations: { confidence: c })
  end
end

通过的规范确认它可以按预期工作:

require 'rails_helper'

RSpec.describe DoctorLocation, type: :model do

  after(:each) { DoctorLocation.destroy_all }
  it "includes locations with the correct confidence" do
    dl = DoctorLocation.create!(location: Location.create!(confidence: 2))
    DoctorLocation.create!(location: Location.create!(confidence: 1))
    expect(DoctorLocation.with_confidence(2)).to include dl
    expect(DoctorLocation.with_confidence(2).count).to eq 1
  end
  it "does not include rows without a match in the join table" do
    dl = DoctorLocation.create!(location: Location.create!(confidence: 1))
    expect(DoctorLocation.with_confidence(2)).to_not include dl
  end
end

#2楼 票数:0

joins及其where (散列参数)中,您需要声明关联名称( location ),而不是表名称( locations ):

DoctorLocation.joins(:location).where(location: { confidence: 2 })

这通常是造成混乱的原因。

  ask by user2954587 translate from so

未解决问题?本站智能推荐:

1回复

Rails过滤器关联记录[重复]

这个问题已经在这里有了答案: 预加载具有动态条件的has_many关联 4个答案 我有帖子和评论模型帖子has_many:commetns评论归属于:post我想检索所有*带有特定用户评论的帖子。 (所以我想获得每一个帖子(甚至是那些没有评论的帖子),并过滤掉某些用户创建的评
2回复

Rails使用连接关联提取值

我有两个模型superhero和superpower之间的铁路连接表。 现在我有3个不同的superpower id ,我希望所有superheroes都拥有所有选定的superpowers 为此,我正在尝试执行以下操作: 但是这给了我一个空的对象,即使我有superheroes在我的
1回复

EagerLoad间接关联Rails

协会如下: 我想做类似的事情会导致N + 1错误: 这会导致N + 1错误,因为必须为每个employee进行查询。 我想eager load间接关联employees 。 但是,我不能简单地includes(:employees)因为pet与employees没有直接联系。 如何
1回复

Rails-用户选择的过滤器

我有一个商店模型,该数据库具有以下属性:商店名称,商店开业年限,总销售额(还有更多)。 我已经对该数据进行了一些统计,其结果是此表: 现在,我要让用户选择/输入年份,并且该应用程序仅显示该年份的以下数据(而不是整个表格) 我的shop.rb表部分: 我的控制器: 最后是视图文件
1回复

Rails5过滤器字段

因此,在Rails控制台中,我以这种方式创建一行: 谁都可以看到,Rails正在过滤“ active”和“ qtype”字段。 这两个列都存在于迁移文件和PostgreSQL的表中。 该模型非常基本: 我不明白为什么Rails会过滤这些字段。 我删除了schema.rb文件并从头开
2回复

如何在Rails中应用此过滤器

我有一个称为language的表,该表有一个称为lang_code的列。 它具有以下值。 我需要从此表中删除3种语言(CHI,DAN ad VIE)。 我可以简单地编写迁移并从表中永久删除值。 但是我不想这样做。 相反,我想在模型级别将它们过滤掉,这样我对这个特定模型进行的任何操作都
1回复

Rails4ActiveRecord过滤器

我正在重新编写多年前编写的Rails 1.x应用程序,并且遇到了使用rails 4过滤activerecord的问题。 楷模: 釉: 成分: 材料: 每个材料都有一个布尔复选框,以指示它是否是着色剂。 我想过滤每个釉料记录中非着色剂的材料。 在旧的Rail 1.x应用程
3回复

在Rails中查询联接关联

广告系列具有:start_date,:end_date属性 发票具有:start_date,:end_date属性 campaign.rb invoice.rb 我想所有这些cmapaigns其start_date小于当前日期AND其end_date之间campaign.invo