Rails - 仅在显示特定页面时呈现部分
我有一个使用Ajax的应用程序,这有助于在用户每次单击链接时无需刷新整个页面。Rails - 仅在显示特定页面时呈现部分
在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>
在我的控制器的显示方法是:
def show
@show_map = true
@review = Review.new
@reviews = @user.reviews
end
的问题是,我的网页上停留部分所有的时间 - 收益的东西出现在它下面。因此,如果某人点击了“联系我们”或“关于我们”或其他任何内容,即使它与“联系我们”或“关于我们”无关,它也会出现在地图下方。
我远离Ajax的专家 - 获得了很多帮助,但它非常有用,可以很好地消除这种需求! - 用于所有这些页面重新加载。 有没有一种方法来编码它,以便只有当被点击的链接激活'显示'页面时,部分才会显示?任何其他相关的意见,将不胜感激,谢谢。
Chris。
在ajax方法中,您可以在接收到页面内容之后再浏览页面内容。我会假设你正在使用jQuery:
$.ajax({
type: "GET",
#...
success: function(data) {
$(".page-content").replaceWith($(data).find(".page-content"));
}
});
我的意见,它是你的最佳方式。在这种情况下,您的后端不关心“您是否使用布局进行渲染”。
谢谢,我稍后会详细讨论这个问题。原因是我必须首先做这个部分的事情,因为我的谷歌地图没有显示在我的div中,当从Ajax调用时,其他所有内容都显示,但是地图是一个很大的白色盒子。任何想法为什么这可能是? – CHarris 2013-04-21 08:16:58
这种情况,因为谷歌地图无法正确初始化。在显示popup div后,你应该触发调整事件'google.maps.event.trigger(map,'resize')'。 – ole 2013-04-21 10:55:15
嗨,这不是一个弹出窗口 - 我假定你正在谈论一个弹出窗口?,但是你可能会让我走上正确的轨道,我正在研究它。谢谢 – CHarris 2013-04-21 23:15:53
假设您的控制器名为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 %>
这是因为你的@show_map是真的,并且该值将始终为真? – Nich 2013-04-21 01:12:29
是的,每次Ajax调用/点击我的链接,它似乎都会绕过application.html.erb,其中show_map已设置。你知道是否有任何方法可以每次检查该页面吗?我可以在其他控制器中将show_map设置为false,但没有太多点被绕过。谢谢。 – CHarris 2013-04-21 08:13:40