Ruby on rails rails更新控制器方法是否只适用于一个对象?

Ruby on rails rails更新控制器方法是否只适用于一个对象?,ruby-on-rails,rest,Ruby On Rails,Rest,我经常使用ajax来更新或删除控制器中的对象。现在,有更新和销毁方法,它们通常查找单个id并对其执行操作。但是我经常需要对多个对象执行相同的操作。我可以修改update方法,将id作为一个数组进行抓取并循环,无论是一个id还是多个id,它都会对每个id执行相同的操作,或者为update\u all创建一个几乎相同的方法。尝试使用update作为update\u all方法是明智的,还是令人困惑?update_all方法的缺点似乎是它的代码非常相似,但都是这样 控制器中的更新是否总是针对一个对象?

我经常使用ajax来更新或删除控制器中的对象。现在,有更新和销毁方法,它们通常查找单个id并对其执行操作。但是我经常需要对多个对象执行相同的操作。我可以修改update方法,将id作为一个数组进行抓取并循环,无论是一个id还是多个id,它都会对每个id执行相同的操作,或者为update\u all创建一个几乎相同的方法。尝试使用update作为update\u all方法是明智的,还是令人困惑?update_all方法的缺点似乎是它的代码非常相似,但都是这样


控制器中的更新是否总是针对一个对象?什么是最佳实践以及人们通常做什么?

您可以在
ActiveRecord::Relation
(查找结果)上调用
update
,它将更新所有对象。这基本上是一个方便的方法,它执行您描述的循环并对每个对象调用update。(见:附件)

还有一个
update\u all
方法,其工作原理类似于
delete
,因为它只是将查询发送到数据库。这将用一个查询更新所有记录。但是,该不会执行任何rails验证或回调。实际上,这严重限制了该方法在日常编码中的实用性。我发现这种方法对于特殊脚本中的批量活动更有用

一些评论:


Rails和ActiveRecord的一个缺点是其回调模型基于与数据库的单记录交互。虽然这让编码变得难以置信的美妙,但它却让大批量事务变得非常繁重。我个人花了很多时间来克服(或解决)这个缺点。总的来说,它的其他好处是值得的。

我不希望彻底改变7个“开箱即用”操作的概念行为。如果其他人出现并尝试使用该代码,他们很可能会对您为什么将其从正常/常规更新操作行为更改而感到困惑。相反,我会添加一个名为descriptive(update_many或类似的东西)的收集路由


此外,您能否提取出常用的代码来进行干燥处理?

您指的是模型上的ActiveRecord
update
方法,还是生成脚手架时在控制器中创建的
update
方法?听起来你可能是指后者,但不清楚。啊,对不起,控制器中的方法。我想你可能也被我的帖子弄糊涂了。我说的是更一般的控制器中的更新方法,而不是直接在对象上更新。除非我误解了你的答案。我也在沿着这些思路思考——主要的7项行动似乎应该保持基本不变。同时考虑重复代码。。。我认为这可能只是最初的查询,然后是更新本身,尽管随后发生的js可能会被抽象出来。