5

Stack Overflowを数時間検索していますが、関連する質問はどれも私の問題には当てはまらないようです。

私はRailsを初めて使用しますが、これが私の最初の実際のプロジェクトであり、MVCのセットアップを少し混乱させる可能性があります。searchs_controller.rbのアクション中に、@starsインスタンス変数を割り当てようとしています。

def create
  @search = Search.new(params[:search])
  tempstr = searchstr(@search)
  @stars = Star.where("tempstr", :limit => 100)
end

@searchはうまく作成され、さまざまなパラメータを使用した複雑な検索になります。tempstrは、結果の単純な文字列コンテナですsearchstr(@search)。これは、検索パラメータをMySql関連の文字列に変換するための簡単な方法です(この場合、.whereヘルパーを通常使用するよりも簡単なようです)。.whereに直接入れることができると確信してsearchstr(@search)いますが、要素が通過するときに要素を検査できるように、今はそれらを分割します。

@starsとにかく、 show.html.erbビューで呼び出そうとすると、問題が発生します。このような単純なものでも:

<% @stars.each do |star| %>
  <%= display stuff %>
<% end %>

と言うエラーが表示されます'each' is not a method of nil:NilClass。そこで、@ starsがnilであるかどうかを確認するために、次のように変更しました。

<%= @stars.inspect %>

案の定、@starsですnil。ただし、この行をコントローラーに追加して確認すると、次のよう@starsになります。

return render @stars.each

意図したとおり、変数がStar.where()からの正しい星オブジェクトで満たされていることがわかります。クイック.inspectは、コントローラー内にあるときに変数がnilではないことを示します。

したがって、コントローラーで適切に定義されているのに、ビューがnilとして受信している理由がわかりません。ただし、MVCがどのように機能するかを誤解していても驚かないでしょう。StarクラスはStarモデルで定義されていますが、Searchesコントローラーからアクセスしようとしているため、ビュー用に初期化されていない可能性がありますか?

これを別の方法で行う必要がありますか?ローカル変数を使用しようとしましたが(starsの代わりにを使用@stars)、ビューに「未定義のローカル変数またはメソッド'stars'」と表示されます。

どんな助けでも大歓迎です、私はすでに何時間も頭を悩ませて複雑な検索を作成し、スターファイルデータをデータベースに解析しているので、私は少し燃え尽きています。リクエストがあればさらに情報を提供できますが、他に何が答えを提供するのに役立つかわかりません。

4

1 に答える 1

3

メソッドで設定@starsしていcreateますが、話しているビューはshow.html.erbです。メソッドでも設定@starsしてみてください。showこのようなもの:

def show
  @search = Search.find(params[:id])
  tempstr = searchstr(@search)
  @stars = Star.where("tempstr", :limit => 100)
end

これで問題が解決しない場合は、残りのコントローラーアクションを表示してください。そうすれば、より適切にサポートできます。

于 2012-04-11T04:34:26.317 に答える