Rails - 仅在显示特定页面时呈现部分

时间:2013-04-21 00:27:30

标签: ruby-on-rails ajax partial

我有一个使用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的专家 - 得到了很多帮助,但它在消除需求方面非常有用 - 非常好! - 用于所有页面重新加载。 有没有办法对它进行编码,只有当点击的链接激活“显示”页面时,部分才会显示?任何其他相关的建议将不胜感激,谢谢。

克里斯。

2 个答案:

答案 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 %>