簡體   English   中英

在Rails中將text_field值作為參數傳遞給will_paginate

[英]Passing text_field value to will_paginate as parameter in Rails

我有一個Books的控制器,在索引動作中我使用的是will_paginate 我也有標題作者的過濾器。

每當標題作者更改時,我都會進行ajax調用以獲取@books更新版本。

在我的index.js.erb文件中,我有呈現視圖的代碼:

$('#book_list').html("<%= escape_javascript( render('show_books') ).html_safe %>");

我的索引文件如下所示:

<%= will_paginate @books %>
<ol class="list-unstyled" id="book_list">
  <%= render 'show_books' %>
</ol>
<%= will_paginate @books %>

問題是,在AJAX調用之后, will_paginate將不會被更新。 默認情況下,我有45本書(每頁30本書,共2頁),在AJAX調用后,我得到9本書。 應該只顯示1頁,但仍然顯示2頁。

如果將will_paginate放入book_list ,它將消失。 如果我不在外面,將不會更新。

另一個選擇是,我可以將自定義參數傳遞給will_paginate ,但是我不知道如何獲取視圖中文本字段的值並將其作為參數傳遞給will_paginate而不提交。

這些是用於過濾書籍的輸入表單:

<div class="form-group">
  <%= label :title, "Title" %><br>
  <%= text_field :book, :title, {class: 'form-control', placeholder: "Book Title" } %>
</div>
<div class="form-group">
  <%= label :authors, "Authors" %><br>
  <%= text_field :book, :authors, {class: 'form-control', placeholder: "Authors" } %>
</div>

我在這里看到了您的文章Rails3:如何將參數傳遞到自定義的will_paginate渲染器中? 同時嘗試尋找一種方法來動態更改will_paginate生成的頁面鏈接以包括來自用戶的信息。

在我的情況下,用戶可以選擇一個圖表來顯示will_paginate顯示的數據,但是默認頁面鏈接不會傳遞任何額外的參數,因此他們選擇的圖表不會保存在頁面之間。

我的解決方案是重寫該鏈接,以在每個鏈接中包括一個自定義類,然后我可以將javascript放在頁面目標上並調整其屬性。

這是我的替代代碼

module Pageoverride
  class PaginationListLinkRenderer < WillPaginate::ActionView::LinkRenderer
    protected
      def link(text, target, attributes = {})
        if target.is_a? Fixnum
          attributes[:rel] = rel_value(target)
          target = url(target)
        end
        attributes[:href] = target
        attributes[:class] = 'chartpagetest'
        tag(:a, text, attributes)
      end
  end
end

我所做的唯一更改是在屬性數組中添加了:class鍵,並帶有我的自定義類標識符的值

我將在我的will_paginate調用中包含自定義渲染器

<%= will_paginate(@dbtests, :renderer => Pageoverride::PaginationListLinkRenderer) %>

我的Javascript以與我的類匹配的元素為目標,我從變量“ chart_id”廣告中獲取當前數據,並將其附加到每個元素的“ href”屬性的末尾。

for (index = 0; index<document.getElementsByClassName("chartpagetest").length;++index) {
                document.getElementsByClassName("chartpagetest")[index].setAttribute('href',document.getElementsByClassName("chartpagetest")[index].getAttribute('href') + "&chart="+chart_id);
            }

在您的情況下,您可以為鏈接添加“隱藏”屬性和類(attributes [:hidden] ='false'),如果該頁面不再存在,則將其設置為“ true”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM