Ruby on rails 使用联接搜索rails应用程序查询的范围

Ruby on rails 使用联接搜索rails应用程序查询的范围,ruby-on-rails,ruby,postgresql,Ruby On Rails,Ruby,Postgresql,很好,我正在尝试创建一个范围,通过关联模型的属性以及模型本身的属性来搜索关联模型的记录 class Payment < ApplicationRecord belongs_to :payment_issuer, class_name: 'Balance', foreign_key: 'payment_issuer_id', optional: true belongs_to :payment_reciever, class_name: 'Balance', foreign_key:

很好,我正在尝试创建一个范围,通过关联模型的属性以及模型本身的属性来搜索关联模型的记录

class Payment < ApplicationRecord
  belongs_to :payment_issuer, class_name: 'Balance', foreign_key: 'payment_issuer_id', optional: true
  belongs_to :payment_reciever, class_name: 'Balance', foreign_key: 'payment_reciever_id'
  belongs_to :closure, optional: true

  validates_presence_of :amount, :reference, :status

  scope :for_commerce, -> (commerce) { Payment.joins(payment_reciever: {user: :commerce}).where(
      payment_recievers: {
        users: {
          commerce: commerce
        }
      }
    ) 
  }
  scope :billed_at, -> (date) { where("payments.status ILIKE 'Pago' AND payments.created_at >=?", date) }
  scope :refills, -> { where("payments.status ILIKE 'Recarga'") }
end
但是不要返回任何记录,即使我输入了精确的值

这是回报

Payment Load (3.3ms)  SELECT "payments".* FROM "payments" INNER JOIN "balances" ON "balances"."id" = "payments"."payment_issuer_id" INNER JOIN "users" ON "users"."id" = "balances"."user_id" WHERE "users"."name" = $1 AND "payments"."reference" = $2 LIMIT $3  [["name", "1605895669"], ["reference", "1605895669"], ["LIMIT", 11]]
我也试过了

  scope :search, -> (search) { Payment.joins(payment_issuer: :user).where("payments.reference ILIKE '#{search}' OR payments.payment_issuers.users.name ILIKE '#{search}'") }
但是回来

ActiveRecord::StatementInvalid (PG::FeatureNotSupported: ERROR:  cross-database references are not implemented: payments.payment_issuers.users.name)
LINE 1: ...E (payments.reference ILIKE 'Esteban Chirinos' OR payments.p...

非常感谢您,我希望您的回答有误吗?如果是,请将其添加到您的问题中。我认为您的
where
语句不正确,但如果没有这些信息,很难确定。即使输入值,也不会返回任何记录​​这已经存在了为什么你要做
用户。我喜欢“管理员”
?规范化您的数据…@max向我解释如何规范化我的数据
payments.payment\u issuers.users.name
应该是
users.name
在您的查询中,现在它认为您正在调用[database\u name].[schema].[table].[column],这是跨数据库查询的正常格式。相反,您只需要[table].[column],因为联接处理对payments表和payment_issuers表的引用
Payment Load (3.3ms)  SELECT "payments".* FROM "payments" INNER JOIN "balances" ON "balances"."id" = "payments"."payment_issuer_id" INNER JOIN "users" ON "users"."id" = "balances"."user_id" WHERE "users"."name" = $1 AND "payments"."reference" = $2 LIMIT $3  [["name", "1605895669"], ["reference", "1605895669"], ["LIMIT", 11]]
  scope :search, -> (search) { Payment.joins(payment_issuer: :user).where("payments.reference ILIKE '#{search}' OR payments.payment_issuers.users.name ILIKE '#{search}'") }
ActiveRecord::StatementInvalid (PG::FeatureNotSupported: ERROR:  cross-database references are not implemented: payments.payment_issuers.users.name)
LINE 1: ...E (payments.reference ILIKE 'Esteban Chirinos' OR payments.p...