2011-11-10 9 views
1

は私が私の見解で表示フィールドの値を表示する必要があり、次のコードがあります。フィールド値がRailsの最初のレコードに表示されないのはなぜですか?

<% @product.options.each do |o| %> 
<tr> 
    <td class="option"> 
    <%= o.display %> 
    ... 

をしかしo.display部分が非常に最初のオプションレコードのために動作しません。他のすべてのオプションでは、表示値は正しく表示されますが、最初の表示値は表示されません。私はその特定のオプション(オプション1)の値が存在することをMySQLで検証しました。

mysql> select id,title,display from options; 
+----+-----------------------------+---------+ 
| id | title      | display | 
+----+-----------------------------+---------+ 
| 1 | Option 1     |  1 | 
| 2 | Option 2     |  2 | 
| 3 | Option 3     |  3 | 
+----+-----------------------------+---------+ 

私はここで間違っていますか?

詳細情報:私が追加した場合

<%= debug o %> 

表示欄を印刷しようとする前に、それはデバッグ情報を表示するだけでなく、適切に表示値を示しています。デバッグなしでは、表示値は表示されません。

+0

何か間違っているように見えません。あなたは確信していますか?製品の質問のオプションは、あなたが思うものですか?それは、データ/検索の問題に対して1点多くを除いて、すべてのオプションで機能するということです。 –

+0

最初のオプションでは、他のフィールドはすべて正しく表示されます。他のオプションには、表示フィールドのデータが表示されます。どのように私はオプションについて他に何かを検証することができたかわからない。 – croceldon

答えて

2

displayは、RubyのObjectクラスのメソッドです。これはActiveRecordに問題が発生したと思います。たぶん、あなたはそのフィールドの名前を変更することができます、それはより簡単なオプションでなければなりません。

+0

表示フィールドにアクセスする別の方法はありますか? Rubyメソッドとの競合であれば、他のオプションで表示フィールドが表示されることは間違いです。 – croceldon

+0

@croceldon Mmmですが、この方法はまだ動的に追加されているかもしれませんが、まだ何が起こっているのか(私には)説明されていません。 –

0

デバッガにコードを入力し、ステップスルーします。

@product(またはこのインスタンス変数と他のインスタンス変数が設定されているコントローラ)にデバッガを置きます。

あなたのレールアプリをデバッガに入れるには - あなたのGemfileに "gem ruby​​-debug"を追加し、バンドルをインストールする必要があります。 (Ruby 1.9を使用している場合は、 "ruby-debug19"を実行する必要があります)。アクションを実行すると、サーバーを起動した場所にコンソールがポップアップします。次に "n"、リストを "l"、オブジェクトをプリントアウトする "p"を使用することができます。 (デバッガマニュアルを読む)。

"what is in @ product.option"に自分自身に質問する必要がありますか?それは配列ですか?それはそれぞれに反応しますか?最初の要素は何ですか?

私はループを削除し、オプションで "@ product.option [0] .display"を使用するだけです。

詳細情報がない場合は、私が助けることができるのは、デバッグに役立つことです。

関連する問題