【问题标题】:Ruby on Rails - Ajax Pagination EXTRA_CONTENT_DISCARDEDRuby on Rails - Ajax 分页 EXTRA_CONTENT_DISCARDED
【发布时间】:2014-09-02 09:33:31
【问题描述】:

伙计们,我正在尝试使用 ajax 进行分页。

我有这个部分叫做 `_ofertas_ativas.html.erb

<h1>Ofertas Activas</h1>
<table class="table table-striped table-bordered">
  <tr>
  <%= ajax_section :id => "page", :render => "page" %>
  </tr>
</table>
<p><%= link_to "ver todas", ofertas_path %></p>`

这里的页面部分:

<%= ajax_loadzone do %>
  <% @ofertas_ativas.each do |oferta| %>
    <td>
      <p><%= link_to oferta.titulo, oferta_path(oferta) %></p>
      <p><%= oferta.data_inicio %> a <%= oferta.data_fim %></p>
      <p><%= oferta.corpo %></p>
      <% if @user.role == "candidato" %>
        <%= link_to "Candidatar-me", "/candidatura/#{current_user.candidato.id}/#{oferta.id}" , class: "btn btn-default btn-primary" %>
      <% elsif current_user?(@user) %>
        <%= link_to "Editar", edit_oferta_path, class: "btn btn-default btn-primary" %>
      <% end %>
    </td>
  <% end %>
<% end %>
<%= ajax_links :section_id => "page" do %>
  <%= will_paginate @ofertas_ativas %>
<% end %>

这是我的控制器:

def show
    @user = User.find(params[:id])
    if @user.role == "entidade"
      @user_ent = Entidade.find_by("user_id = ?",params[:id])
      @ofertas_ativas = @user_ent.ofertas.where("ativa = ?",true).paginate(page: params[:page], :per_page => 2)
      respond_to do |format|
        format.html
        ajax_respond format, :section_id => "page"
      end

当我单击下一个按钮或出现此消息的数字时:

    AJAX Pagination EXTRA_CONTENT_DISCARDED:
Extra content returned by AJAX request ignored. Only a portion of the page content returned by the server was required. To fix this, explicitly call ajax_respond :section_id => "page" to render only the partial view required. This warning can be turned off in the ajax_pagination initializer file.

是因为我有 _ofertas_ativas 部分吗?我真的不知道如何解决这个问题。控制器中的这个respond_to我还是不是很明白。

有人知道怎么回事吗?

【问题讨论】:

  • 你在使用 rails 4
  • 是的,我正在使用 rails 4。但我认为这不是问题所在。是吗? ://
  • 这个 gem 与 rails 4 有问题我把它放在答案块中

标签: jquery ruby-on-rails ruby ajax pagination


【解决方案1】:

当您在从 rails 控制器返回的内容中有任何问题时会出现此警告,请参阅此处https://github.com/ronalchn/ajax_pagination/blob/master/lib/assets/javascripts/ajax_pagination.js.erb。您还可以在初始化程序 config/initializers/ajax_pagination.rb 中忽略此警告,例如:

AjaxPagination.config do |config| config.warnings = false end

但这也会产生 Rails 4 的问题,请参阅此处https://github.com/ronalchn/ajax_pagination/issues/8

这个 gem https://github.com/ronalchn/ajax_pagination/issues 与 rails 4 相关的问题很少

【讨论】:

  • 我真的认为这就是我的做法。导致所有!我看到的例子只是为了索引。没有人向您展示如何在索引之外进行操作。我在展示页面上这样做。我想在其中对项目列表进行分页。
  • 也可以在您的索引上尝试一下。但这是与rails版本有关的问题。所以我认为你应该转向其他一些宝石。
  • 在索引中它可以工作,但它会抛出相同的警告。但是ajax分页有效。它在警告后转到另一个页面而不重新加载页面
  • 你无法在 rails 4 中避免这个警告。所以从我这边移到其他 gem 是个好主意
  • @Lokuzt 你找到解决办法了吗?
【解决方案2】:

如果这有任何帮助: 我在 gem 本身中注释了警告代码。 gems/ajax_pagination-0.6.3/lib/assets/javascripts/ajax_pagination.js.erb

第 197 行

// <% if AjaxPagination.warnings %>

// alert("AJAX Pagination EXTRA_CONTENT_DISCARDED:\nExtra content returned by AJAX request ignored. Only a portion of the page content returned by the server was required. To fix this, explicitly call ajax_respond :section_id => \"" + section_id + "\" to render only the partial view required. This warning can be turned off in the ajax_pagination initializer file.");

// <% end %>

警报都是一行**

目前没有其他问题,如果有会更新。您或多或少是通过配置文件告诉 Rails 做同样的事情。

【讨论】:

    【解决方案3】:

    我对 Ruby/Rails 很陌生,但这是我对这个问题的看法。

    我不确定为什么会出现问题,但假设这是与 Rails 4 的兼容性问题。*

    不要注释掉警报代码或禁用警告。这个警告是合法的。它说您的服务器返回完整页面,而不仅仅是所需的片段。因为它呈现整个页面,所以它占用更多带宽并给服务器带来更多负载。

    这就是我解决问题的方法:

    config/initializers/mime_types.rb 中注册新的自定义 mime 类型

    Mime::Type.register "text/html", :ajax
    

    您可以随意命名它。我选择了“ajax”。

    注意它是 Rails 已经默认定义的“text/html”类型。

    然后将视图文件 _ofertas_ativas.html.erb 重命名为 _ofertas_ativas.ajax.erb

    然后在您的控制器中替换该行:

    ajax_respond format, :section_id => "ofertas_ativas"
    

    format.ajax { render :partial => "ofertas_ativas" }
    

    现在您的 respond_to 块如下所示:

    respond_to do |format|
      format.html # index.html.erb
      format.ajax { render :partial => "ofertas_ativas" }
    end
    

    “ajax_pagination”gem 发出的 ajax 请求已接受:text/html。现在您已经定义了两个用于 text/html 的 mime 类型处理程序。

    如果第二行不存在,Rails 将执行默认的 ajax mime 类型处理程序,即 JS,因此 index.js.erb 将被渲染。但是因为这是 ajax 请求并且注册了非默认的 html mime 类型(ajax),所以它会尝试查找 _ofertas_ativas.ajax.erb。

    我希望这会有所帮助。

    附:我绝对建议使用其他一些宝石。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-31
      • 1970-01-01
      相关资源
      最近更新 更多