如何在ruby-on-rails中的视图内呈现索引视图

时间:2015-10-23 01:39:23

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

我正在尝试在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 %>

感谢您提供所有帮助。

2 个答案:

答案 0 :(得分: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视图和其他页面,以便在各自的操作布局中使用partial:

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

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

-

<强>资源

其次,您需要了解您的应用的运作方式。

您的索引视图旨在显示特定对象的所有项目。虽然您可以根据需要自由更改,但事实仍然是您需要k eep some structure

enter image description here

您应该阅读有关您的操作的路线,以及它们在您的应用程序中的工作方式。这将为您提供有关Rails路由的resourceful性质的一些观点,以及您将如何使用特定操作调用特定路由。

答案 1 :(得分:0)

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

如果您需要有关使用AJAX的完整指南,请查看railscast。如果您不使用AJAX并且只是想渲染它,那么您就不会使用link_to。你只需要&lt;%= render:index%&gt;。