首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rails中的Ruby活动记录返回关系

rails中的Ruby活动记录返回关系
EN

Stack Overflow用户
提问于 2014-11-12 03:59:38
回答 2查看 87关注 0票数 0

我有这个密码

代码语言:javascript
复制
@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

但是,当我想要在我的视图中显示数据时,请使用以下代码:

代码语言:javascript
复制
<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)的数据。

代码语言:javascript
复制
@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来将代码作为

代码语言:javascript
复制
@devices_data[device.id.to_s] = @project.vibration_data.find(:all, conditions: { vibration_device_id: device.id }).first

我也尝试过将查找更改到检索数据的位置。

代码语言:javascript
复制
@devices_data[device.id.to_s] = @project.vibration_data.where(vibration_device_id: device.id ).first

但是它们不起作用,在视图中,它仍然返回给我关系而不是值,这给了我一个错误信息。

我有什么问题?我该怎么解决呢?谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-12 04:10:19

代码语言:javascript
复制
<p><%= @devices_data.first.id%></p> // it says undefined method `id' for # Array:0x000000058b0150

给出一个错误,因为@devises_data.first将把哈希的第一项作为键值数组返回。

如果你尝试

代码语言:javascript
复制
<p><%= @devices_data.first.last.id%></p>

将打印您要查找的id,因为@devised_data是一个散列,首先将哈希的第一个元素作为键数组( value ),当您向数组发送消息时,最后将返回值对象,然后使用id获取您要查找的id。

票数 0
EN

Stack Overflow用户

发布于 2014-11-12 04:06:10

.find(:all, :conditions => <cond>)是查找一组活动记录的旧方法。现在您应该使用where(cond),它应该更适合您。

where返回一个活动关系..。然后,您可以使用最后一个方法来获取符合条件的all或仅first项。

然后,当您应用first时,它将为您从活动关系中提取第一项--这似乎是您想要的。

..。但是,因为您要将这个值存储到散列中.然后,您必须使用each迭代散列中的所有项,或者再次使用first来获取已放入哈希中的第一个项.

所以,就像:

代码语言:javascript
复制
@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 %>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26879020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档