2017-11-16 17 views
-1

私はRuby on Railで新しく、練習したいと思います。 私は戸惑いのビューにビューを含めるときに立ち往生しています。 私はポスト/インデックスのより別のビューに私の記事を持っていることを実行して欲しいRails 5 ActionView :: Helpers capture method

posts/index

  • 方法:

    def index 
        @Posts = Post.all 
    end 
    
  • ビュー:

    <% @posts = capture do %> 
    
        <% @posts.each do |post| %> 
        <h3> 
         <%= post.title %> 
        </h3> 
        <p> 
        <%= post.content %> 
        </p> 
        <% end %> 
    
    <% end %> 
    

pages/index

<h1> Index Of another pages </h1> 
<%= @posts %> 

答えて

0

あなたが部分として再利用可能なビューのコードを保存し、それをこれは必須ですすべての場所をレンダリングする必要があるようにそれは私に聞こえます。

一部を使用するには、アンダースコアのプレフィックス(例:_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」のやり方です。

あなたはどのように乗っているか教えてください!

+0

を取得していない場合、それは動作しません、と私は持っている私を修正エラー{と 欠落部分ポスト/ _posts:ロケール=>:EN]:フォーマット=>:HTML]:ハンドラ=>:原料:ERB:HTML => []を、変異体、:ビルダー、:ルビー、:コーヒー、:jbuilder]}。検索された: –

+0

もし私がそうするなら、私は投稿のモデルをビューに宣言する必要がありますか?はいの場合は、「SELECT * FROM POSTS」のようなデータベース要求をn + 1と呼びますか? –

+0

あなたは部分を作成しましたか?あなたはそれに正しいパスを使用することを確認する必要があります。コントローラのポストをロードしてビューをレンダリングする必要があります。これらの部分データを使用しているコンテキストについては少しはっきりしていませんが、必要なポストをロードまたは含める場合はN + 1の必要はありません正しくおそらく、これらがどこに質問に呼ばれるのかという少しの文脈を追加するでしょうか? – SRack

0

あなたがフォローコードで行く、その後、別のビューをレンダリングするために、あなたのindexアクションを強制する場合:

def index 
    @Posts = Post.all 
    render 'pages/index' 
end 

は、私はあなたに

+0

これはうまくいかず、(n + 1)ページに自分の投稿を含めたいと思います。 –

関連する問題