2012-01-12 21 views
0

簡体字中国語 データをデータベースに送信して、Herokuコンソールのみを使用するよう気にしないかもしれません。それを検索する。Rails noob:データベースから値を取得してapplication.html.erbに表示

元の質問

私はすべての書籍を読んだが、今、私は混乱し

を取得しています実装しようとしていることを私は合計という名前のモデル(ない最高の名を、作成したが、もう1つの問題です)、profitnumberfeesという3つの列があります。ここでは、コンソールのプリントアウトです

t = Total.first 
=> #<Total id: 1, profit: 500, number: 7, fees: 40, created_at: "2012-01-12 04:21:33", updated_at: "2012-01-12 04:21:58"> 

(私はこのエントリがローカルホストに提示するために利用されることを前提とし、注意してください:3000を開発データベース上で行われている場合)

による私はこのデータを提示するための最も簡単な場所(私のウェブページレイアウトに)application.html.erbにあるので、私はこのような小さなテーブルを持っている。この表を見ると、インスタンス変数@t.profit@t.number@t.feesで 'profit'を呼び出すことによって、データをどのように表示したいのかが分かります。

<table class = "condensed-table" > 
     <thead> 
      <tr> 

      <th>Profit </th> 
      <th>Number of Trades</th> 
      <th> Fees</th> 
      </tr> 
     </thead> 
     <tbody> 
      <tr> 


      <td>$<%= @t.profit %> </td> 
      <td><%= @t.number %></td> 
      <td><%= @t.fees %></td> 
      </tr> 
      </tbody> 
     </table> 

だから今、それはデータベースからデータを取得し、私は私がコンソールに

ruby-1.9.2-p290 :019 > t.profit 
=> 500 

を行ったように、t.profit @呼び出すことができるようにインスタンス変数を作成するための唯一の問題ですapplication.html.erbTotal.rb modelやプレゼンテーションで、私は、データベースからデータを取得するために....私はこれを行うために必要な

@t = Total.find(params[:id]) 

を考え出したが、私は方法a何を呼び出す必要がありますそれを動作させるためにどこに置くべきですか?例えば

、私はページコントローラを持っていたページが閲覧、(私は仮定)私はちょうど

def index 
@t = Total.find(params[:id]) 
end 

のようなビューのindexアクションを作成することができ、その後、私はちょうど@t.profitを行うことができます。しかし、もし私のような何かをして私のテーブルを提示する私のサイトのすべての部分でデータを利用することはできませんでした。

私はapplication_controller.rb

に入れしようとしましたが、あなたは、フィルタフックを経由してこれを行うことができ、このエラーメッセージ

NoMethodError in Posts#index 

Showing /Users/me/Sites/enki2/app/views/layouts/application.html.erb where line #73 raised: 

undefined method `profit' for nil:NilClass 

Extracted source (around line #73): 
+0

あなたの最後の文は非常に紛らわしいです。サイト全体でその変数を使用できないと思われる理由についてもう少し説明できますか? (ヒント:できます) – sosborn

+0

@sosborn彼が望むのは、特定のリソースのビューだけでなく、すべてのビューで利用可能であることです。とにかくそれは私がそれを理解する方法です。 –

+0

あなたが望む問題は、すべてのビューで利用できるparams [:id]がなくなり、それがどこにあるかにかかわらず、コンテキストに応じて異なります。なぜこのアプリケーション全体が必要なのか分かりません。 –

答えて

1

を得た - それは、メソッド(またはいくつかの方法を)ことができます必要に応じて、すべてのコントローラに対して呼び出すことができます。また、特定のアクションとコントローラーの発砲から明示的に除外することもできます。 - http://apidock.com/rails/ActionController/Filters/ClassMethods/before_filter

しかし、あなたのケースでは、おそらくすべてのコントローラのすべてのアクションコールでparams [:id]を使用することはできません。テーブルを一般的なレイアウトの一部として含める必要がある場合は、おそらく変更されないIDが必要になります。このためにacts_as_singletonプラグインを使用することができます - https://github.com/stephencelis/acts_as_singleton。そして、あなたは、それ自体、部分的にこれを使用することができます:

<% @t = Total.instance -%> 
    <td>$<%= @t.profit %> </td> 
    <td><%= @t.number %></td> 
    <td><%= @t.fees %></td> 

それとも、単にそれは常に最初になりますと仮定することができます

<% @t = Total.first -%> 
    <td>$<%= @t.profit %> </td> 
    <td><%= @t.number %></td> 
    <td><%= @t.fees %></td> 
+0

ありがとうございます、2番目の例ではTotal.firstにもプラグインが必要ですか? – Leahcim

+0

いいえ、これはRailsに含まれています:) – PinnyM

+0

ありがとうございますが、ハイフンは何ですか? "%%"? – Leahcim

関連する問題