【问题标题】:render ActiveRecord response in from Controller to View将 ActiveRecord 响应从 Controller 渲染到 View
【发布时间】:2013-05-19 19:29:10
【问题描述】:

我是 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

class CreateObservations < ActiveRecord::Migration
  def change
    create_table :observations do |t|
        t.float :load_time
        t.timestamps        
    end

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

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3.2 rails-activerecord


    【解决方案1】:

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

    <%= time.your_field %>
    

    在你的情况下:

    <%= time.load_time %>
    

    【讨论】:

    • Observation#load_time 是浮点列,而不是日期。
    【解决方案2】:

    在您看来,&lt;%= time =&gt; 转换为 _buf &lt;&lt; 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(&amp;:to_s) 现在会导致ActiveModel::MissingAttributeError 错误(因为to_s 要求此列存在)。

    一般来说,我建议明确地获取您需要的结果,即在您的情况下:

    <% @times.each do |time| %>
      <p>time: <%= time.load_time %></p>
    <% end %>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多