Ruby on rails 具有多个/属于多个关联的活动记录查询

Ruby on rails 具有多个/属于多个关联的活动记录查询,ruby-on-rails,activerecord,has-and-belongs-to-many,Ruby On Rails,Activerecord,Has And Belongs To Many,我已经构建了一个Rails应用程序,其中包含关于美国国会的数据。我有一个立法者模型和一个法案模型: class Legislator < ActiveRecord::Base has_many :bills end class Bill < ActiveRecord::Base belongs_to :legislator end 类立法者法案。加入(:legiator)。where(legiator:{party:'D'})PG::未定义:错误:缺少表“legiator

我已经构建了一个Rails应用程序,其中包含关于美国国会的数据。我有一个立法者模型和一个法案模型:

class Legislator < ActiveRecord::Base
  has_many :bills
end

class Bill < ActiveRecord::Base
  belongs_to :legislator
end
类立法者
因此,立法者提出的法案与该立法者有关。立法者还有一个“党派”属性,即“R”、“D”或“I”


我想得到一份由某一政党的所有立法者提出的所有法案的清单,例如,所有由民主党人提出的法案。此查询是什么样子的?

加入并将查询作为散列放置

Bill.joins(:legislator).where(legislators: {party: 'D'})

联接并将查询作为哈希放置

Bill.joins(:legislator).where(legislators: {party: 'D'})

联接并将查询作为哈希放置

Bill.joins(:legislator).where(legislators: {party: 'D'})

联接并将查询作为哈希放置

Bill.joins(:legislator).where(legislators: {party: 'D'})
但我建议你们写一些关于立法者和法案的范围

# class Legislator
scope :by_party, ->(party) do
  where(party: party)
end

# class Bill
scope :sponsored_by_party, ->(party) do
  joins(:legislator).merge(Legislator.by_party(party))
end
然后你就可以写了

Bill.sponsored_by_party("I")
但我建议你们写一些关于立法者和法案的范围

# class Legislator
scope :by_party, ->(party) do
  where(party: party)
end

# class Bill
scope :sponsored_by_party, ->(party) do
  joins(:legislator).merge(Legislator.by_party(party))
end
然后你就可以写了

Bill.sponsored_by_party("I")
但我建议你们写一些关于立法者和法案的范围

# class Legislator
scope :by_party, ->(party) do
  where(party: party)
end

# class Bill
scope :sponsored_by_party, ->(party) do
  joins(:legislator).merge(Legislator.by_party(party))
end
然后你就可以写了

Bill.sponsored_by_party("I")
但我建议你们写一些关于立法者和法案的范围

# class Legislator
scope :by_party, ->(party) do
  where(party: party)
end

# class Bill
scope :sponsored_by_party, ->(party) do
  joins(:legislator).merge(Legislator.by_party(party))
end
然后你就可以写了

Bill.sponsored_by_party("I")


这给了我一个错误`来自bin/rails:12:in
'irb(main):025:0>Bill.joins(:legiator.where)(legiator:{party:'D'})PG::未定义:错误:表“legiator”第1行的子句条目中缺少:…lators.“'id”=“bills.“legiator_id”where”立法者…
^好吧,我想因为我需要说立法者:{party:'D'}
而不是立法者:{party:'D'}(缺少的
s
)这给了我一个错误`来自bin/rails:12:in
'irb(main):025:0>法案。加入(:立法者)。其中(立法者:{party:'D'})PG::unfinedtable:错误:表“legitors”第1行的子句条目中缺少:…lators.“'id”=“bills.“'legitors_id”其中的“legitoro…”
^我想是因为我需要说
legitors:{party:'D'}
而不是
legitors:{party:'D'}
(缺少的
s
)这给了我一个错误`来自bin/rails:12:in
'irb(main):025:0>法案。加入(:legiator)。where(legiator:{party:'D'})PG::未定义:错误:缺少表“legiator”第1行的子句条目:…lators.“'id”=“bills.”legiator_id“where”立法者…
^好吧,我想因为我需要说立法者:{party:'D'}
而不是立法者:{party:'D'}
(缺少的
s
)这给了我一个错误`来自bin/rails:12:in
'irb(main):025:0>法案。加入(:立法者)。其中(立法者:{party:'D'})PG::unfinedtable:错误:表“legitors”第1行的子句条目中缺少:…lators.“'id”=“bills.“'legitors_id”其中的“legitoro…”
^我想是因为我需要说
legitors:{party:'D'}
而不是
legitors:{party:'D'}
(缺少的
s
)加入+合并时生成的查询是什么?因为我不在控制台,所以我必须伪造它。它应该是
SELECT bills.*FROM bills internal JOIN legitors ON legitors.id=bills.legitors\u id WHERE legitors.party='I';
所以活动记录在关系级别上支持
.merge
方法正确吗?因为我知道ght这将是一些数组合并,我需要了解这一点,谢谢+1,当你执行JOIN+merge时生成的查询是什么?因为我不在控制台,我必须伪造它。它应该是
SELECT bills.*从bills内部JOIN Legitors ON Legitors.id=bills.Legitors\u id WHERE Legitors.party='i';
如此活跃的记录在关系级别上支持
.merge
方法是否正确?因为我认为这将是某种数组合并,我需要了解这一点,谢谢+1,当您执行JOIN+merge时生成的查询是什么?因为我不在控制台,我必须伪造它。它应该是
选择法案。*从法案内部加入立法者对立法者的立法者。id=bills.legitor\u id WHERE legitors.party='I';
那么active record在关系级别上支持
.merge
方法,对吗?因为我认为这可能是数组合并,我需要了解一下,谢谢+1,当你执行join+merge时会生成什么查询?因为我不在控制台上,我必须伪造它。它是应该是
SELECT bills.*FROM bills internal JOIN legitors ON legitors.id=bills.legitors\u id WHERE legitors.party='I';
所以活动记录支持关系级别上的
.merge
方法正确吗?因为我认为这将是一些数组合并,我需要阅读一下,谢谢+1和