我有一个模型传感器和来自此模型的查询:
@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))
第二:找到记录后更改临时值并保存到数据库。所有记录都可能发生变化。 第一和第二怎么办?
答案 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)
仅保存那些温度值已更改的传感器。