0

コントローラーで宣言されたインスタンス変数がそのビューで認識されない理由を考えられる人はいますか?

コントローラーは次のようになります。

class UsersController < ApplicationController

...
def show

@questionshow = session[:profilequestioncapture]
@user = User.find(params[:id])
@question = Question.where("id = ?", @questionshow).first
...

ビュー: (users ディレクトリの show.html.erb:)

...
<dl class="dl-horizontal">
      
    <dt>Headline</dt>
    <dt>Description</dt>
    <dt>Budget</dt> 

    <dd><%= @question.headline %></dd>
    <dd><%= @question.description %></dd>
    <dd><%= @question.currency %>&nbsp<%= @question.budget %></dd>

</dl>
....

-セッションは @questionshow インスタンス変数を正しく入力します。ID のみが含まれており、これは @question に正しく渡されます。

-奇妙な点: <%= @user.xxxx %> は正しくフォーマットされて表示されますが、<%= @question.xxx %> を含むものは正しく表示されません。

-さらに奇妙なのはここです。コントローラーで @user をコメントアウトしても、レコードは引き続きビューに正しく表示されるため、コントローラーの内容は事実上無視されます (ただし、理由はわかりません)。

-はい、正しいコントローラーとビューアーを見ていることを確認しました。

4

4 に答える 4

1

session[:profilequestioncapture] が nil でないことは確かですか?

于 2013-02-01T15:34:22.067 に答える
0

解決策を見つけましたが、少し戸惑いました。同じコントローラー内のすべてのアクションで、質問モデルにアタッチされた同じインスタンス変数を定義していませんでした。したがって、Show では @question でしたが、Create では (たとえば) @yyyquestion で、Update では別のもの (@yyyquestion など) を使用していました。これがエラーを引き起こす理由と、インスタンス変数がビューではなくコントローラーに入力される理由がわかりません。この話には続きがあると思います...

于 2013-02-02T12:58:59.963 に答える
0

まず、where スコープは、レコードではなく ActiveRecord::Relation (配列を与える) を与えると思います。IDで検索したいので、お勧めします

Question.find(session[:profilequestioncapture])

ほとんどの場合、ActiveRecord::NotFound 例外をレスキューし、デフォルトの質問を設定するか、動作を変更する必要があります。

Draper または Presenters を使用していますか? @question に実際にデータがあることを再確認できますか?

コメントアウトされている場合でも、 @user の背後にあるユーザーについては、次のようになります。

  • キャッシュの問題を確認する
  • データを入力できる before_filter アクションを確認してください。
于 2013-02-01T15:45:15.087 に答える
0

@questionActiveRecord::Relationオブジェクトです。それを呼び出さないと.first、いくつかの質問属性を呼び出そうとするとエラーが発生します。そして、答えの1つで述べられているように、session[:profilequestioncapture]nilの場合にも当てはまります

于 2013-02-01T15:38:13.557 に答える