2

我是 Rails 的新手。我正在使用 Rails 3.2.13。我会尽量保持我的问题简洁:

在我的控制器中,我想从观察表中获取最后 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 个条目正确地进入了控制器,这很好。

我的 Observation < 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

提前感谢您的帮助 - 非常感谢。

4

2 回答 2

2

您只需要访问对象内部的变量

<%= time.your_field %>

在你的情况下:

<%= time.load_time %>
于 2013-05-19T19:38:29.580 回答
1

在您看来,<%= time =>转换为_buf << time.to_s_bufERb 的内部输出缓冲区在哪里)。一个简单的解决方法是定义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 %>
于 2013-05-19T20:17:17.793 回答