0

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

@sensors = Sensor.where(device_id: 4) 

输出是:

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

第一:我想搜索这个查询结果,例如locate (find) for seq_num = 2

(@sensors.find(seq_num = 2))

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

4

3 回答 3

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


# Second
Sensor.update_all({:temp => 1}, {device_id: 4, seq_num: 2})
于 2013-09-29T04:40:23.250 回答
0

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

如果您需要@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 
于 2013-09-29T04:40:36.063 回答
0

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

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

检测方法返回第一个找到的元素或 nil 没有找到。

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

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

或者

@sensors.each(&:save)

只有那些改变了温度值的传感器才会被保存。

于 2013-09-29T04:58:35.930 回答