条件 update_all 与 ActiveRecord 中的连接表?

发布于 2024-10-23 22:10:41 字数 439 浏览 3 评论 0原文

以下查询返回我想要更新的 AR 对象的集合:

Variant.all(:joins => { :candy_product => :candy }, :conditions => "candies.name = 'Skittles'")

我正在尝试执行如下操作:

Variant.update_all(:price => 5, :joins => { :candy_product => :candy }, :conditions => "candies.name = 'Skittles'")

这应该只更新从原始查询返回的变体的价格。 AR 可以做到这一点吗?还是我必须编写 SQL?这是一个相当大的集合,所以任何迭代的东西都会被淘汰。

使用 Rails 2.3.4。

The following query returns the collection of AR objects that I want to update:

Variant.all(:joins => { :candy_product => :candy }, :conditions => "candies.name = 'Skittles'")

I'm trying to do something like the following:

Variant.update_all(:price => 5, :joins => { :candy_product => :candy }, :conditions => "candies.name = 'Skittles'")

This should only update the price for the variants returned from original query. Is this possible with AR or will I have to write the SQL? This is a pretty large collection, so anything that iterates is out.

Using Rails 2.3.4.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

南风几经秋 2024-10-30 22:10:41

正如 @François Beausoleil 正确指出的那样,我们应该使用 scoped

Variant.scoped(:joins => { :candy_product => :candy }, :conditions => "candies.name = 'Skittles'").update_all(:price => 5)

As @François Beausoleil pointed correctly we should use scoped

Variant.scoped(:joins => { :candy_product => :candy }, :conditions => "candies.name = 'Skittles'").update_all(:price => 5)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文