【问题标题】:Rails PostgreSQL checking an arrayRails PostgreSQL 检查数组
【发布时间】:2017-12-05 20:18:27
【问题描述】:

我仔细研究了复制此处提供的答案Postgresql: comparing arrays results in "malformed array literal" error 但是我仍然收到错误消息。

我有两张表 Locations 和 Customers。 位置属于客户

addresses = ["1 Mullberry St", "24 Western Ave", "923 Shetland Dr"]    

Customer.joins(:location)
  .where("'#{addresses}'::text[] && locations.street1")
  .pluck(:email)

以下是我收到的 SQL 和错误

SELECT "customers"."email"
  FROM "customers"
    INNER JOIN "locations" ON "locations"."customer_id" = "customers"."id"
      WHERE ('{'1 Mullberry St', '24 Western Ave', '923 Shetland 
Dr'}'::text[] && locations.street1)

ActiveRecord::StatementInvalid: PG::SyntaxError: ERROR:  syntax error at or near "1"

【问题讨论】:

    标签: ruby-on-rails arrays postgresql


    【解决方案1】:

    您是否尝试从该列表中包含其 location.street1 的客户那里获取电子邮件?

    如果是这样的话,那么你想要结束的 SQL 更像是:

    SELECT "customers"."email"
    FROM "customers" INNER JOIN "locations" ON "locations"."customer_id" = "customers"."id"
    WHERE locations.street1 IN ('1 Mullberry St', '24 Western Ave', '923 Shetland Dr')
    

    在 Rails 中做到这一点应该很简单:

    Customer.joins(:location)
      .where("locations.street1" => addresses)
      .pluck(:email)
    

    【讨论】:

    • 谢谢,我没有意识到你可以使用 location.DOT。在那个语法中。我改用冒号而不是哈希火箭。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-21
    • 1970-01-01
    • 1970-01-01
    • 2020-03-31
    • 1970-01-01
    • 1970-01-01
    • 2015-01-25
    相关资源
    最近更新 更多