You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求将SQL查询转换为Rails Active Record查询

请求将SQL查询转换为Rails Active Record查询

没问题,这就帮你把这两段SQL转换成和原语句完全匹配的Rails Active Record查询,结合你提到的Station has many Connectors的关联关系,两种写法都给你列出来:

1. 对应Station的查询

原SQL:

SELECT "stations".* FROM "stations" WHERE "stations"."id" = $1 LIMIT $2 [["id", "f8cc6584-9794-4863-9e3a-7ac05a1b5d46"], ["LIMIT", 1]]

Active Record写法:

# 最简洁的方式,find方法默认会添加LIMIT 1,生成的SQL和你给出的完全一致
Station.find("f8cc6584-9794-4863-9e3a-7ac05a1b5d46")

# 如果你想更明确写出limit条件,也可以这么写,效果完全一样
Station.where(id: "f8cc6584-9794-4863-9e3a-7ac05a1b5d46").limit(1).first

2. 对应Connectors的查询

原SQL:

SELECT "connectors".* FROM "connectors" WHERE "connectors"."station_id" = $1 AND "connectors"."id" IN ($2, $3) [["station_id", "f8cc6584-9794-4863-9e3a-7ac05a1b5d46"], ["id", "a476c0a6-bccb-42c7-935f-541031344860"], ["id", "e8e8e80b-6f73-4a66-9345-ae59a042b56d"]]

因为Station和Connectors是一对多关联,有两种推荐的写法:

  • 通过关联对象查询(更符合Rails约定):
    先拿到对应的Station对象,再通过关联查询指定id的Connectors:
    station = Station.find("f8cc6584-9794-4863-9e3a-7ac05a1b5d46")
    station.connectors.where(id: ["a476c0a6-bccb-42c7-935f-541031344860", "e8e8e80b-6f73-4a66-9345-ae59a042b56d"])
    
  • 直接查询Connector模型:
    如果你已经知道station_id的值,也可以直接写条件查询:
    Connector.where(
      station_id: "f8cc6584-9794-4863-9e3a-7ac05a1b5d46",
      id: ["a476c0a6-bccb-42c7-935f-541031344860", "e8e8e80b-6f73-4a66-9345-ae59a042b56d"]
    )
    

这两种写法生成的SQL都会和你给出的完全一致,你可以根据实际场景选择合适的方式~

备注:内容来源于stack exchange,提问作者user5922898

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 15:09:37