【问题标题】:How to render the index view, from inside a view in ruby-on-rails如何从 ruby​​-on-rails 中的视图内部渲染索引视图
【发布时间】:2015-10-23 01:39:22
【问题描述】:

我正在尝试在我的 ruby​​-on-rails 应用程序中呈现索引视图。如何从传递要显示的事物数组的视图内部渲染索引视图?使用 link_to。

我不想重新路由到控制器,我只想链接到一个视图,将它需要的变量传递给它,我该怎么做? 编辑: 我正在尝试在我的文章模型的索引中创建页面类型功能。例如,我有大约 400 篇文章,当调用文章控制器中的索引操作时,它当然会呈现索引视图,该索引视图正在调用文章控制器的索引操作传递的“@articles 数组”中的每篇文章的部分.

因此,在视图中,我正在尝试执行以下操作:

    <% count = 0 %>
    <% @articles.each do |article| %>
      <% if count <10 %>
        <%= render partial: 'index_articles', locals: {article: article} %>
        <% count = count + 1 %>
      <% end %>
    <% end %>
    <% @articles = @articles.drop(10) %>
    <% if @articles.any? %>
      <%= link_to "Next", 'articles', locals: {@articles => @articles} %>
    <% end %>

非常感谢您的所有帮助。

【问题讨论】:

    标签: ruby-on-rails ruby web-applications view rendering


    【解决方案1】:

    您需要使用render command可能partial

    <%= render "controller/index", collection: ["your", "array"], as: :object_name %>
    

    您将必须调用控制器操作来生成它。你不能简单地将它加载到你的屏幕上,除非它是在你的 javascript 中预加载的:

    #View
    <%= link_to "Index", controllers_path(ids: ["1","2"]), remote: true %>
    
    #app/controllers/your_controller.rb
    class YourController < ApplicationController
       def index
          @posts = request.xhr? Post.find(params[:ids]) : Post.all
          respond_to do |format|
             format.js  #-> app/views/controller/index.js.erb
             format.html
          end
       end
    end
    
    #app/views/controller/index.js.erb
    $(".element").html("<%=j render 'index' %>");
    

    这种方法存在几个问题...


    流程

    首先,您的应用程序的流程应尽可能结构化。

    简而言之,如果您在另一个操作中调用 index 视图,它就不再是 索引视图了。

    你应该看看如何在你的应用中使用部分:

    #app/controller/views/_partial.html.erb
    <%= post.title %>
    

    这样,您可以调整您的 index 视图和您的其他页面以在各自的操作布局中使用部分:

    #app/controller/views/index.html.erb
    <%= render "partial", collection: @posts, as: :post %>
    

    这将允许您以您想要的方式“重用”代码。这将比尝试调用其他操作/视图更合适。

    -

    资源

    其次,您需要了解应用的功能。

    您的 index 视图旨在显示特定对象的所有项目。虽然您可以随意更改此设置,但事实仍然是您必须发送至 keep some structure

    您应该阅读您的操作的路线,以及它们在您的应用程序中的工作方式。这将使您对 Rails 路由的 resourceful 特性有一些看法,以及您必须如何使用特定操作调用特定路由。

    【讨论】:

    • 您好,感谢您的回复。但是,我了解操作的路线,我并不想删除此基本功能的工作原理。我正在尝试(不使用 gem)基本上创建一组页面。例如,我有大约 400 篇文章,我希望将它们编入索引,每页不超过 10 篇。所以我已经有一个部分(显示每篇文章),所以 views/articles/index.html.erb 试图一次显示 10 篇文章,然后从文章中删除这 10 篇文章,然后当有人点击下一步时,我想在新页面上显示这个新的文章列表,其中少了 10 篇。
    【解决方案2】:

    您的问题可能是文件需要命名为_index.html.erb。您可以拥有另一个名为 index.html.erb 的文件,它只呈现 _index.html.erb。

    如果您需要有关使用 AJAX 的完整指南,请查看 railscast。如果您不使用 AJAX 并且只想渲染它,则不要使用 link_to。你只需 。

    【讨论】:

    • 我已经有了这个,我知道如何做基本的导轨类型的事情。我正在尝试打印特定模型的特定子集。因此,使用索引,将构建此模型的所有活动记录的列表,现在我要渲染它们,例如一次 20 条。 20 也是如此,然后用户点击下一步,又出现了 20。这是一个页面类型的功能。
    • 而且我已经知道如何渲染局部视图,我想要一个link_to,来渲染另一个视图。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-31
    • 2015-07-13
    • 2011-08-02
    • 1970-01-01
    • 2013-04-26
    • 1970-01-01
    相关资源
    最近更新 更多