[英]Ruby Active Record returns relation in Ruby on rails
我有这个代码
@devices_data=Hash.new
@devices.each do |device|
@devices_data[device.id.to_s] = @project.vibration_data.find(:all, conditions: { vibration_device_id: device.id })
end
但是,当我想在视图中显示数据时,请使用以下代码:
<p><%= @devices_data %></p> //this show whole block of data
<p><%= @devices_data.first.id%></p> // it says undefined method `id' for # Array:0x000000058b0150
如果我删除哈希容器,只需存储类似的数据(无需定义@device_data=Hash.new
)
@devices.each do |device|
@devices_data = @project.vibration_data.find(:all, conditions: { vibration_device_id: device.id})
end
<p><%= @devices_data.first.id%></p>
将显示其ID而不是错误消息。 但是我在每个设备中都有多个数据,我确实需要一个数组或哈希来保存它。 但这给了我一个问题。我尝试添加.first
使代码成为
@devices_data[device.id.to_s] = @project.vibration_data.find(:all, conditions: { vibration_device_id: device.id }).first
而且我还尝试过更改查找位置以检索数据。
@devices_data[device.id.to_s] = @project.vibration_data.where(vibration_device_id: device.id ).first
但是它们不起作用,因为它仍然返回我的关系而不是值,这给了我一条错误消息。
我怎么了 我该如何解决? 谢谢!
.find(:all, :conditions => <cond>)
是查找一组活动记录的旧方法。 您现在应该改用where(cond)
,它应该对您更好。
where
返回活动关系...,然后可以在其上使用final方法来提取all
或仅匹配条件的first
项。
当你再申请first
它会拉的第一个项目为你的积极关系-这似乎是你想要的。
...但是然后,因为您要将这个值存储到哈希表中,所以您必须使用each
遍历哈希表中的所有项目,或者再次使用first
来取出您放入的第一个项目哈希...
所以像这样:
@devices_data = {}
@devices.each do |device|
@devices_data[device.id.to_s] = @project.vibration_data.where( vibration_device_id: device.id ).first
end
<% @devices_data.each do |device_id, device| %>
<p><%= device_id %></p>
<p><%= device.name %></p> <!-- or whatever -->
<% end %>
<p><%= @devices_data.first.id%></p> // it says undefined method `id' for # Array:0x000000058b0150
给您一个错误,因为@ devises_data.first会将哈希的第一项带回[key,value]数组
如果你试试
<p><%= @devices_data.first.last.id%></p>
将打印您要查找的ID,因为@devised_data是一个哈希,因此first将给您哈希的第一个元素作为[key,value]的数组,当您发送到数组时,消息的最后一个将使您返回值对象,然后使用ID,您将获得要查找的ID
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.