2011-01-22 6 views
1

で部分インデックスをレンダリングするために、私はテーブルのように部分的にレンダリングしようとしている(インデックス)どのように私のダッシュボードでRails3

マイ部分:一部のトランザクションに基づいて、実際にインデックスされていることを_transaction.html.erb インデックス。テーブル内のすべてのトランザクションを返す必要があります。私の部分が含まれています。私が受け取る

<% @transactions.each do |transaction| %> 
    <tr> 
    <td><%= transaction.transaction_type %></td> 
    <td><%= transaction.date %></td> 
    </tr> 
    <% end %> 

エラー:あなたはそれを期待していなかったとき

」あなたはnilのオブジェクトを持っている あなたは、Arrayのインスタンスを期待しているかもしれません評価しながら にエラーが発生しました!。 nil.each "

+0

@transactions変数がまったく設定されていないようです。コントローラに設定してもよろしいですか?たぶん@名前の前に@を忘れてしまったでしょうか? – tomeduarte

答えて

2

これは、あなたのTransactionsController#indexアクションが@transactionsに対して何も返さないことを示しているようです。 最も明白な原因は、レコードを見つけるために使用しているロジックが壊れているか、結果が0か、@トランザクションが正しく設定されていないことです。

このようなビューでは、結果がない(または何らかのエラーが発生した)状況をエラーチェックしたいとします。

あなたのindex.htmlビュー:パーシャル

<% if [email protected] || @transactions.length == 0 %> 
    <p>'No transactions found.'</p> 
<% else %> 
    <table> 
     <!-- put your column headers here --> 
     <!-- the next line iterates through each transaction and calls a "_transaction" partial to render the content --> 
     <%= render @transactions %> 
    </table> 
<% end %> 

あなた_transaction.html.erb:あなたのビューが再び作業を取得します

<tr> 
    <td><%= transaction.transaction_type %></td> 
    <td><%= transaction.date %></td> 
</tr> 

。次のステップは、コントローラのアクションが結果を返さない理由を突き止めることです。まず、レールコンソールを開き、レコードを取得しようとします。

>> Transaction.all 

結果が返ってきたら、データがあります。ない場合は、あなたが開発したWebインターフェイスを介して、またはレールコンソール経由のいずれかのレコードを作成します。あなたは、レコードを持っていたら

>> t = Transaction.new() 
>> t.transaction_type = 1 #or whatever is appropriate for your application 
>> t.date = Date.today 
>> t.valid? #if true, your record will save. If not, you need to fix the fields so they validate 
>> t.save 

、もう一度ビューをテストします。それでも障害が発生する場合は、おそらくコントローラロジックにエラーがあります。そのエラーが何であるかについては、あなたがそれを手伝ってくれるように投稿する必要があります。 :)

+0

Shaunに感謝します。魅力のように動作します。スコープを通じてトランザクションを表示するためにビューを更新するにはどうすればよいですか? – Olivier

+0

コントローラのアクションは、情報を取得して@transactions変数に配置するために、モデル上のスコープを参照する必要があります。そこから、ビューは@transactionsをその特定のスコープのデータのコレクションとして参照します。 – Shaun

+0

また、あなたの質問に答えたすべての人々のために好意を持ち、返事が必要なものであれば投票スコアの下にあるチェックマークをクリックして戻ってそれらを受け入れることができます。それは将来同じ質問をする他の人たちを助けるだけでなく、あなたとその質問に答えた人は少しでもカルマになるでしょう。 :) – Shaun

関連する問題