如何在Rails 6中正确地进行多对多查询

问题描述 投票:0回答:2

在Rails 6中以多对多关系进行下一个查询的最佳方法是什么?>>

这是我的结构:

class Contact < ApplicationRecord
  has_and_belongs_to_many :lists
end

class List < ApplicationRecord    
  has_and_belongs_to_many :contacts
end

这是迁移文件:

class AddContactsListsRelation < ActiveRecord::Migration[6.0]
  def change
    create_table :contacts_lists do |t|
      t.belongs_to :contact
      t.belongs_to :list
    end
  end
end

这是我的查询:

class ContactsLists < ApplicationRecord

  def self.find_with_page(listId, paginationQuery)
    contacts = List.find(listId).contacts
    result = contacts.order(created_at: paginationQuery[:order]).limit(paginationQuery[:page_size])
               .offset(paginationQuery[:page_number] * paginationQuery[:page_size])
    result
  end
end

我不是Rails查询API的专家,但我认为这是进行两个不同查询的次佳方法,对吗?

在Rails 6中以多对多关系进行下一个查询的最佳方法是什么。这是我的结构:类Contact

< [
由于已经定义了多对多关系,因此可以轻松地连接表。现在,您需要获取联系人,在这种情况下,该联系人应该是构建查询的“基础”模型,例如:

Contact .joins(:lists) .where(list_id: listId) .order(created_at: paginationQuery[:order] .limit(paginationQuery[:page_size]) .offset(paginationQuery[:page_number] * paginationQuery[:page_size])

这应该起作用:

def self.find_with_page(list_id, pagination_query) Contact.joins(:lists) .where(lists: { id: list_id }) .order(created_at: pagination_query[:order]) .limit(pagination_query[:page_size]) .offset(pagination_query[:page_number] * pagination_query[:page_size]) end

ruby-on-rails ruby postgresql many-to-many
2个回答
2
投票
由于已经定义了多对多关系,因此可以轻松地连接表。现在,您需要获取联系人,在这种情况下,该联系人应该是构建查询的“基础”模型,例如:

1
投票
这应该起作用:
© www.soinside.com 2019 - 2024. All rights reserved.