Ruby on rails 在rails中搜索和更改查询结果中的字段值
我有一个型号传感器和一个来自此型号的查询:Ruby on rails 在rails中搜索和更改查询结果中的字段值,ruby-on-rails,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 (@sensors.find(seq_num = 2)) 第二:找到记录后更改临时值并保存到数据库。可能所有记录都已更改。 怎样才能做到第一和第二呢?你的问题有点不清楚。您需要获取所
@sensors = Sensor.where(device_id: 4)
输出为:
Id seq_num temp
5 1 40
6 2 41
7 3 45
首先:我想搜索这个查询结果,例如查找seq_num=2
(@sensors.find(seq_num = 2))
第二:找到记录后更改临时值并保存到数据库。可能所有记录都已更改。
怎样才能做到第一和第二呢?你的问题有点不清楚。您需要获取所有传感器的列表,然后只获取带有序号2的传感器。您还需要@sensors中的其余数据吗?那么您想更改找到的值并保存它吗?此外,您还需要使用设备,因为假设传感器属于设备,您可以通过设备关联进行查询
# First
@sensors = Sensor.where(device_id: 4, seq_num: 2)
# Second
Sensor.update_all({:temp => 1}, {device_id: 4, seq_num: 2})
如果您需要@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
如果所有传感器的seq_num值都是唯一的,则可以使用以下代码通过其seq_num值在@sensors列表中找到传感器:
sensor = @sensors.detect { |s| s.seq_num == 2 }
@sensors.each { |s| s.save }
detect方法返回第一个找到的元素,或者返回“未找到任何内容”中的nil
要在更新温度值后保存所有传感器,可以使用以下代码:
sensor = @sensors.detect { |s| s.seq_num == 2 }
@sensors.each { |s| s.save }
或
只有那些温度值已更改的传感器才会保存。我需要查询结果中的所有记录(3)并更改了所有记录。然后sensors=Sensor.where(device_id:4)和Sensor=sensors.find{Sensor|Sensor | Sensor.seq_num==2}用于在结果中查找seq_num,在查找之后,我希望更改该记录中的临时值并保存它。我的目标是对数据库运行一个查询,而不是3个查询。正确吗?通过检测方法找到传感器后。我可以更改温度值吗:sensor.temp=40和@sensors.each{| s | s.save}。对吗?