[英]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.