Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在rails中搜索和更改查询结果中的字段值_Ruby On Rails - Fatal编程技术网

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}。对吗?