2

私はRailsが初めてです。Rails 3.2.13 を使用しています。私は質問を簡潔にしようとします:

私のコントローラでは、Observation テーブルから最後の 10 エントリを取得したいと考えています。私は持っている:

def index
   @times = Observation.select(:load_time).last(10)
end

そのビューで、次のように 10 個のエントリをレンダリングしようとします@times

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

Web ページで得られる応答は次のようになります。

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

ビューでは、 ( ERb の内部出力バッファーはどこにありますか) に<%= time =>変換されます。これに対する簡単な回避策は、次のように を定義することです。_buf << time.to_s_bufObservation#to_s

class Observation < ActiveRecord::Base
  def to_s
    load_time.to_s
  end
end

Observation.select(:id).map(&:to_s)now を指定するとActiveModel::MissingAttributeErrorエラーが発生することに注意してください (to_sこの列が存在する必要があるため)。

一般に、必要な結果を明示的に取得することをお勧めします。つまり、あなたの場合は次のようになります。

<% @times.each do |time| %>
  <p>time: <%= time.load_time %></p>
<% end %>
于 2013-05-19T20:17:17.793 に答える