将ActiveRecord查询记录的字段从1更新为n,而无需循环

时间:2018-09-21 11:49:31

标签: ruby-on-rails ruby ruby-on-rails-4 activerecord ruby-on-rails-5

是否有任何逻辑可将ActiveRecord查询记录的字段从1更新为n。

@user = User.where(country: 'US')

需要将@user的字段计数以上的值从1更新为n。

谢谢。

编辑:

需要更新所有记录的-字段为count

AR查询将返回数组,需要从1到n到array(tuple)的count字段中的每个元素

示例:AR查询输出:[User1, User2, User3, User4, ...]

User1的count字段必须更新为1

User2的count字段必须更新为2,依此类推。

1 个答案:

答案 0 :(得分:1)

您可以使用SQL来完成此操作,具体取决于您的数据库,但是pub fn apply_random_pos(n: usize, min_distance: f64) -> Vec<(f64, f64)> { fn distance(p1: (f64, f64), p2: (f64, f64)) -> f64 { ((p1.0 - p2.0).powf(2.) + (p1.1 - p2.1).powf(2.)).sqrt() } let mut rng = thread_rng(); let mut positions = Vec::with_capacity(n); while positions.len() < n { let mut p1 = rng.gen::<(f64, f64)>(); let mut p2 = rng.gen::<(f64, f64)>(); // Multiply with 10 because we need numbers bigger than 1 p1 = (p1.0 * 10.0, p1.1 * 10.0); p2 = (p2.0 * 10.0, p2.1 * 10.0); if positions.iter().all(|&p2| distance(p1, p2) > min_distance) { positions.push(p1); positions.push(p2); } } positions } 的{​​{1}}不支持。

查看以下内容:Update SQL with consecutive numbering

要执行SQL,您可以使用:

ActiveRecord