我是Rails的新手。我正在使用Rails 3.2.13。我会尽量保持我的问题简洁:
在我的控制器中,我想从Observation表中获取最后10个条目。我有:
def index
@times = Observation.select(:load_time).last(10)
end
在该视图中,我尝试在@times
中渲染10个条目,如下所示:
<% @times.each do |time| %>
<p>time: <%= time %></p>
<% end %>
我在网页上收到的回复如下:
time: #<Observation:0x007fe22bf2a138>
我想知道如何将实际时间变量作为浮点数而不是(看起来像是什么)内存地址。似乎最后10个条目正确地进入控制器,这是好的。
我的观察中没有逻辑&lt; ActiveRecord :: Base类,因为迁移负责定义模式。这是我的db / migrate / create_observations.rb的样子:
class CreateObservations < ActiveRecord::Migration
def change
create_table :observations do |t|
t.float :load_time
t.timestamps
end
提前感谢您提供任何帮助 - 非常感谢。
答案 0 :(得分:2)
您只需访问对象内的变量
<%= time.your_field %>
在你的情况下:
<%= time.load_time %>
答案 1 :(得分:1)
在您看来,<%= time =>
会转换为_buf << time.to_s
(其中_buf
是ERb的内部输出缓冲区)。一个简单的解决方法是定义Observation#to_s
,如下所示:
class Observation < ActiveRecord::Base
def to_s
load_time.to_s
end
end
请注意,Observation.select(:id).map(&:to_s)
现在会导致ActiveModel::MissingAttributeError
错误(因为to_s
要求此列存在)。
一般情况下,我会明确地获取您需要的结果,例如在您的情况下:
<% @times.each do |time| %>
<p>time: <%= time.load_time %></p>
<% end %>