在rails中查询和更改查询结果中的字段值

时间:2013-09-29 04:21:38

标签: ruby-on-rails

我有一个模型传感器和来自此模型的查询:

@sensors = Sensor.where(device_id: 4) 

输出是:

Id  seq_num temp
5   1       40
6   2       41
7   3       45

首先:我想搜索此查询结果,例如seq_num = 2

的locate(find)
(@sensors.find(seq_num = 2))

第二:找到记录后更改临时值并保存到数据库。所有记录都可能发生变化。 第一和第二怎么办?

3 个答案:

答案 0 :(得分:0)

# First
@sensors = Sensor.where(device_id: 4, seq_num: 2)


# Second
Sensor.update_all({:temp => 1}, {device_id: 4, seq_num: 2})

答案 1 :(得分:0)

你的问题有点不清楚。您想获得所有传感器的列表,然后只获得seq_num 2的传感器。您是否还需要@sensors中的其余数据?那么你想改变你找到的值并保存它?您还需要使用该设备,因为asssuming传感器属于您可以通过设备关联查询的设备。

如果您需要@sensors中的所有传感器。你可以这样做。

@sensors = Sensor.where(device_id: 4)
@sensor = @sensors.find { |sensor| sensor.seq_num == 2 } 

如果您只需要一个传感器就可以

@senser =  Sensor.where(device_id: 4, seq_num: 2) 

关于更改数据并保存数据,

@sensor.temp = new_temp
@sensor.save 

答案 2 :(得分:0)

如果 seq_num 值对于所有传感器都是唯一的,那么您可以使用此代码通过其 seq_num 值在 @sensors 列表中找到传感器:

sensor = @sensors.detect { |s| s.seq_num == 2 }

detect 方法返回找到的第一个元素,或者找不到任何内容。

要在更新 temp 值后保存所有传感器,您可以使用以下代码:

@sensors.each { |s| s.save }

@sensors.each(&:save)

仅保存那些温度值已更改的传感器。