Ruby on rails Ruby活动记录在Ruby on rails中返回关系

Ruby on rails Ruby活动记录在Ruby on rails中返回关系,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我有这个密码 @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> //th

我有这个密码

@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
将显示其id而不是错误消息。 但是我在每个设备中有超过1个数据,我确实需要一个数组或散列来保存这些数据。但这给我带来了问题。我尝试添加。首先将代码作为

@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=>是一种查找一组活动记录的旧方法。您现在应该改用wherecond,它应该对您更有效

其中返回一个活动关系。。。然后,您可以对其使用最终方法来获取所有或仅获取与您的条件匹配的第一项

当你先申请时,它会为你从活动关系中抽出第一项——这似乎是你想要的

。。。但是,因为您正在将此值存储到散列中。。。然后,您必须使用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 %>
给您一个错误,因为@designes_data.first将把散列的第一项作为[key,value]数组返回

如果你尝试

<p><%= @devices_data.first.last.id%></p>

将打印您要查找的id,因为@U data是一个散列,首先将散列的第一个元素作为[key,value]数组提供给您,当您发送到数组时,最后一条消息将返回value对象,然后使用id您将获得您要查找的id

ya,看来我还需要一层来获取数据
<p><%= @devices_data.first.id%></p> // it says undefined method `id' for # Array:0x000000058b0150
<p><%= @devices_data.first.last.id%></p>