web-dev-qa-db-ja.com

Rails 3:ビューのコントローラーから変数を表示

Railsが初めてで、変数をコントローラーからビューに表示する方法を知りたいと思っていました。

基本的に、2つのファイルがあります:articles_controller.rb_article.html.erb

コントローラーファイルには、ビューに表示する変数@article_votesがあります。 <%= @article_votes %>を使用してみましたが、何も表示されません。

誰にもガイダンスがありますか?ありがとうございました!

24
Ben

Railsに慣れていないかわかりません。コントローラ内で定義したインスタンス変数はすべて、ビュー内で到達可能です。

したがって、@article_votesはコントローラで定義され、書き込みます

<pre>
  <%= @article_votes.inspect %>
</pre>

ビューのどこかにページが表示されます。

しかし _article.html.erbはデフォルトでは表示されません。 showArticlesControllerメソッドがある場合、ビューはshow.html.erbがレンダリングされます。これは一般的なアプローチなので、indexメソッドの場合は、index.html.erb

お役に立てれば。

46
nathanvda

パーシャルを呼び出す場合は、@ article_votes変数を渡す必要があります。

<@= render 'article', :article_votes => @article_votes %>

パーシャル内で使用できます

<%= article_votes %>
2
Trent

<%= @article_votes%>の出力は、@ article_votesがオブジェクトであるクラスと、その_article.html.erbテンプレートを実際にレンダリングしているかどうかによって異なります

Index.html.erbファイルまたはこのビューをレンダリングするために使用しているコントローラーアクションにちなんで命名された.html.erbファイルで<%= render:partial => 'article'%>を呼び出すだけです。

通常、コントローラーから来る@article_votesは配列です(慣例により)複数の名前はオブジェクトの配列を示し、単数形の名前はテーブルに保持されているすべての値を含むarticle_votesと呼ばれるテーブルに基づくActiveRecordクラスの特定のオブジェクトを示します特定のレコード用。

@article_votesがnil以外のクラスのインスタンスであることを確認してください

それが単なる文字列である場合(@article_votes = "A string")、ビューに表示されます。 ArticleVotesモデルからすべてのオブジェクトを見つけるためにActiveRecordを呼び出した結果である場合、テーブルに何もない場合は空の配列になります。その配列から特定のオブジェクトを取得する必要があり、その後、そのオブジェクトで使用可能なメソッドのどれを表示するかを選択する必要があります

例えば.

Article_votesテーブルにnameという列があり、そのテーブルに「this is a name」という値を持つarticle_voteレコードが1つあると仮定すると、コントローラーアクションの次のコードは「This is a name画面に

@article_vote = ArticleVote.first

パーシャルに<%= @ article_vote.name%>があり、実際にそのパーシャルをレンダリングしていると仮定した場合

2
jamesc

_article.html.erbは部分的なビューです。ブラウザに適切なアクションが表示されていると確信していますか?

1
Arti

もう1つ重要なことは、レンダリングを呼び出す前に変数値を設定する必要があるということです。

モデルを保存しないとエラーが返される標準の「作成」ブロックがありました。この場合、インスタンス変数を設定していたので、エラーが発生したフォームに再レンダリングがスクロールします。

変数を明確に設定していたのに、なぜ変数が設定されなかったのかわかりませんでした。 「render action::new」の上に移動するとすぐに機能しました。

0
gwnp