Ruby on rails Rails 5 ActionView::Helpers捕获方法

Ruby on rails Rails 5 ActionView::Helpers捕获方法,ruby-on-rails,Ruby On Rails,我是RubyonRails新手,我想练习一下。 当我想在她的视图中包含一个视图时,我被卡住了。 我希望通过这样做将我的帖子放到另一个视图中,而不是帖子/索引视图中 posts/index <h1> Index Of another pages </h1> <%= @posts %> 方法: def index @Posts = Post.all end 视图: <% @posts = capture do %> <%

我是RubyonRails新手,我想练习一下。 当我想在她的视图中包含一个视图时,我被卡住了。 我希望通过这样做将我的帖子放到另一个视图中,而不是帖子/索引视图中

posts/index

<h1> Index Of another pages </h1>
<%= @posts %>
  • 方法:

    def index
        @Posts = Post.all
    end
    
  • 视图:

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

    在我看来,您需要将可重用视图代码保存为部分代码,并在所有需要的地方呈现它

    要使用分部,请使用下划线前缀将其保存下来,即
    \u posts.html.erb

    然后,可以使用以下方法渲染:

    <%= render 'path/to/posts' %>
    
    在两个控制器的
    索引中
    操作:

    @posts=Post.all

    在posts/index视图中:

    在“页面/索引”视图中:

    我不想把事情搞混,但是Rails有一点魔力- 或者-您可以定义部分
    \u post.html.erb
    ,如下所示:

    <h3>
      <%= post.title %>
    </h3>
    <p>
      <%= post.content %>
    </p>
    
    
    
    

    只需在每个视图中调用
    。这将是最好的“粗暴”做事方式


    让我知道你进展如何

    如果要强制索引操作渲染另一个视图,请执行以下代码:

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

    如果我没有得到你的消息,请纠正我

    它不起作用,并且我有一个错误,丢失了部分帖子/_帖子,{:locale=>[:en],:formats=>[:html],:variants=>[],:handlers=>[:raw,:erb,:html,:builder,:ruby,:coffee,:jbuilder]}。搜索:如果我这样做,我需要将posts模型声明到视图中?如果是,我将调用n+1一个数据库请求no,如“SELECT*FROM POSTS”?您在哪里创建了分部?你需要确保你使用了正确的路径。您应该在呈现视图的控制器中加载帖子-我对您在其中使用这些部分的上下文有点不清楚,但是如果您正确加载/包含所需帖子,则不需要N+1。也许可以在问题中添加更多的内容?仅供参考,这里是使用部分的文档:我有两个目录,一个用于帖子的目录,另一个用于静态页面,我没有使用部分,但我使用rails方法将内容页面包含到另一个页面中。这不起作用,我想把我的帖子包括在(n+1)页中。
    <h3>
      <%= post.title %>
    </h3>
    <p>
      <%= post.content %>
    </p>
    
    def index
      @Posts = Post.all
      render 'pages/index'
    end