我正在尝试在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 %>
感谢您提供所有帮助。
答案 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。
您应该阅读有关您的操作的路线,以及它们在您的应用程序中的工作方式。这将为您提供有关Rails路由的resourceful
性质的一些观点,以及您将如何使用特定操作调用特定路由。
答案 1 :(得分:0)
您的问题可能是该文件需要命名为_index.html.erb。您可以使用另一个名为index.html.erb的文件,该文件只呈现_index.html.erb。
如果您需要有关使用AJAX的完整指南,请查看railscast。如果您不使用AJAX并且只是想渲染它,那么您就不会使用link_to。你只需要&lt;%= render:index%&gt;。