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