あなたが部分として再利用可能なビューのコードを保存し、それをこれは必須ですすべての場所をレンダリングする必要があるようにそれは私に聞こえます。
一部を使用するには、アンダースコアのプレフィックス(例:_posts.html.erb
)を付けて保存します。
これは、その後、使用してレンダリングすることができます。
<%= render 'path/to/posts' %>
あなたはおそらく次のように、部分的に変数のポストに合格する必要があります:
<%= render 'path/to/posts', posts: @posts %>
と変更ビュー@posts
ではなくposts
を使用してください。
アップデート:この変数は、まだ別のテンプレートでは利用できないでしょうが、
capture
の結果は、@posts
に割り当てられている - ではなく、同じページに再度使用することが
に基づきますあなたはプロジェクトの構造について何を言っているのですか?あなたは次のようなものが必要でしょう:
in app/views/posts/_posts.html両方のコントローラのindex
アクションでウェブ
<% @posts.each do |post| %>
<h3>
<%= post.title %>
</h3>
<p>
<%= post.content %>
</p>
<% end %>
:ポスト/インデックスビューで
@posts = Post.all
:ページ/インデックスビューで
<%= render 'posts' %>
:
<%= render 'posts/posts' %>
私は物事を混同する必要はありませんが、Railsはそこにちょっとした魔法を有する場合 - が、代わり - 次のように部分的_post.html.erb
を定義することができます。
<h3>
<%= post.title %>
</h3>
<p>
<%= post.content %>
</p>
をし、単に各ビューで<%= render @posts %>
を呼び出します。これは最高の「Railsy」のやり方です。
あなたはどのように乗っているか教えてください!
を取得していない場合、それは動作しません、と私は持っている私を修正エラー{と 欠落部分ポスト/ _posts:ロケール=>:EN]:フォーマット=>:HTML]:ハンドラ=>:原料:ERB:HTML => []を、変異体、:ビルダー、:ルビー、:コーヒー、:jbuilder]}。検索された: –
もし私がそうするなら、私は投稿のモデルをビューに宣言する必要がありますか?はいの場合は、「SELECT * FROM POSTS」のようなデータベース要求をn + 1と呼びますか? –
あなたは部分を作成しましたか?あなたはそれに正しいパスを使用することを確認する必要があります。コントローラのポストをロードしてビューをレンダリングする必要があります。これらの部分データを使用しているコンテキストについては少しはっきりしていませんが、必要なポストをロードまたは含める場合はN + 1の必要はありません正しくおそらく、これらがどこに質問に呼ばれるのかという少しの文脈を追加するでしょうか? – SRack