我试着寻找一个使用Arel::UpdateManager
来形成一个带有from子句的update语句的例子(就像在UPDATE t SET t.itty = "b" FROM .... WHERE ...
中一样),找不到任何例子。在我看来,Arel::UpdateManager
在初始化时设置主引擎,并允许设置要更新的各种字段和值。真的有办法做到这一点吗?
另一个例外是找出如何将Postgres posix正则表达式匹配表示为ARel,但这现在可能是不可能的。
我试着寻找一个使用Arel::UpdateManager
来形成一个带有from子句的update语句的例子(就像在UPDATE t SET t.itty = "b" FROM .... WHERE ...
中一样),找不到任何例子。在我看来,Arel::UpdateManager
在初始化时设置主引擎,并允许设置要更新的各种字段和值。真的有办法做到这一点吗?
另一个例外是找出如何将Postgres posix正则表达式匹配表示为ARel,但这现在可能是不可能的。
2条答案
按热度按时间6fe3ivhb1#
据我所知,当前版本的
arel
gem不支持sql查询的 FROM 关键字。您可以仅使用 SET 和 WHERE 关键字生成查询,例如:而将
units
表的值从field2
复制到field1
的代码如下:你可以使用额外的方法来更新一个关系。因此,我们创建Arel的
UpdateManager
,并为其分配表、where
子句和要设置的值。值可以作为参数传递给方法。然后我们需要将FROM
关键字添加到生成的SQL
请求中,只有当我们可以通过UPDATE
子句本身访问指定的外部表时才添加它。最后我们执行查询。所以我们得到:您可以发出关系更新为:
i86rm4rw2#
基于Мал Скрылев的答案,这是我的想法,它可以让你写得非常类似于现有的
relation.update_all
(它不支持from
):来源如下: