如何根据属于第一个模型的另一个模型的属性来查询模型?

如果我有一个模型Person ,其中每辆Vehicle和每辆Vehicle都可以是carmotorcycle ,那么我怎样才能查询所有拥有摩托车的人和有汽车的人?

我不认为这是正确的:

 Person.joins(:vehicles).where(vehicle_type: 'auto') Person.joins(:vehicles).where(vehicle_type: 'motorcycle') 

你可以做如下:

 Person.includes(:vehicles).where(vehicles: { type: 'auto' }) Person.includes(:vehicles).where(vehicles: { type: 'motorcycle' }) 

请小心.joins.includes

 # consider these models Post # table name is posts belongs_to :user #^^ User # table name is users has_many :posts #^ # the `includes/joins` methods use the relation name defined in the model: User.includes(:posts).where(posts: { title: 'Bobby Table' }) #^ ^ # but the `where` uses the exact table name: Post.includes(:user).where(users: { name: 'Bobby' }) #^^^ ^ 

一个棘手的问题:

 Post belongs_to :author, class_name: 'User' User # table named users has_many :posts Post.includes(:author).where(users: { name: 'John' }) # because table is named users 

类似的问题:

  • 协会命名未find在rails协会可能拼写错误的问题
  • Rails活动logging查询与“存在”的关联
  • Rails 3,has_one / has_many和lambda条件
  • Rails 4的范围是find没有孩子的父母
  • join多个具有活动logging的表格
  • Rails:查找所有关系具有指定属性的用户