我有一个使用Ajax的应用程序,这有助于每次用户点击链接时不必刷新整个页面。
在application.html.erb文件中我有:
<body>
<%= render :partial => 'layouts/user_page_with_map' if @show_map %>
<div class ='page-content'>
<%= content_for?(:body) ? yield(:body) : yield %>
</div>
</body>
我的控制器中的Show方法是:
def show
@show_map = true
@review = Review.new
@reviews = @user.reviews
end
问题是部分停留在我的页面上 - 产量会出现在它下面。因此,如果某人点击“联系我们”或“关于我们”或其他任何内容,它会显示在地图下方,即使它与“联系我们”或“关于我们”无关。
我远不是Ajax的专家 - 得到了很多帮助,但它在消除需求方面非常有用 - 非常好! - 用于所有页面重新加载。 有没有办法对它进行编码,只有当点击的链接激活“显示”页面时,部分才会显示?任何其他相关的建议将不胜感激,谢谢。
克里斯。
答案 0 :(得分:3)
您可以在收到内容后,使用ajax方法对内容进行分页。我假设您使用的是jQuery:
$.ajax({
type: "GET",
#...
success: function(data) {
$(".page-content").replaceWith($(data).find(".page-content"));
}
});
我的意见,这是最适合你的方式。在这种情况下,你的后端不关心“你是否应该使用布局进行渲染”。
答案 1 :(得分:0)
我们假设您的控制器名为FooController
,而您通过Ajax调用的操作是bar
。以下是一个合适的解决方案。
<强>配置/ routes.rb中:强>
get 'bar', to: 'foos#bar'
应用/控制器/ foos_controller.rb:强>
class FoosController < ApplicationController
layout false, only: [:bar] # <-- layout false is key
def bar
@results = Foo.get_results(bar_params)
end
private
def bar_params
params.permit(:utf8, :query, :attribute1, :attribute2)
end
end
应用/视图/ FOOS / bar.html.erb:强>
<% @results.each do |result| %>
<p><%= result.inspect %></p>
<% end %>