Rails 2: Ajax & Table Display Filtering на основе выбранной опции - PullRequest
0 голосов
/ 21 октября 2010

Мой сценарий (работает Rails 2.3.5):

На странице продуктов отдела (index.js.rjs) есть таблица, в которой указаны продукты с их идентификатором, именем, категорией. Представление этой таблицы определяется частичным файлом с именем _index.html.erb. Я собираюсь добавить в выпадающее меню выбора / опции над таблицей, чтобы показать все категории продуктов. Когда пользователь выбирает категорию из выпадающего меню, Ajax включается так, что таблица (не вся страница) будет обновляться только продуктами, которые имеют категорию, равную выбранной категории (то есть операция фильтрации).

Файл "_index.html.erb" имеет,

<table id='<%= dom_id(@department, :products) %>'>
<thead> 
    <tr>
    <%= select_tag("filter_by_category", 
        options_from_collection_for_select(Categories.find(:all, :order => 'name'), :name, :name) %>
    <%= observe_field("filter_by_category", 
                      { :url => department_products_path(:department_id => @department.id),
                        :method => :get,
                        :frequency => 0.5,
                        :with => "'filter_by_category=' + value" }) %>
    </tr>
    <tr> <td>id</td> <td>name</td> <td>category</td> </tr> 
</thead>

<% @products.each do |product| %>
    <%= render :partial => 'departments/product', :locals => {:product => product} %>
<% end %>
</table>

Файл "_product.html.erb" имеет,

<!-- for now, using some simplistic conditionals to do the filtering -->
<!-- filter_by_category is not set to the selected category name after a user selection -->
<% if :filter_by_category == product.category %>
  <tr id='<%= dom_id(product) %>' >
    <td><%= product.id %></td>
    <td><%= product.name %></td>
    <td><%= product.category %></td>
  </tr>
<% end %>

Прямо сейчас, когда я выбираю категорию, ничего не происходит. Журнал сервера вообще не показывает активности.

Вопросы, которые у меня есть:

  1. Нужна ли мне форма "no-op", чтобы приложить мой стол?

    <% form_tag('javascript:void(0)') do %> <table> ... </table> <% end %>

  2. Нужно ли onChange для select_tag? Текущие HTML-коды имеют это:

    <select id="filter_by_category" name="filter_by_category" onChange="filter_by_category">.....

    Значит ли это, что мне нужно создать помощника / контроллер для filter_by_category? Если так, что это должно содержать? Все, что я хочу, это обновить таблицу.

  3. Нужно ли указывать дополнительные параметры для поля наблюдения, например обновления и т. Д.?

  4. В «_product.html.erb» для «filter_by_category» не задано имя выбранной категории после выбора пользователя.

  5. Есть ли лучший способ реализовать такую ​​динамическую фильтрацию?

  6. А как насчет использования link_to_remote вместо meet_field? Пользователь сначала выбирает категорию, а затем нажимает на link_to_remote для обновления таблицы. При таком подходе я мог бы хотя бы обновить таблицу. Однако я до сих пор не знаю, как захватить / указать выбранное значение, которое будет использоваться в частичном для целей фильтрации.

Любой ответ на любой вопрос высоко ценится.

Хока * * тысяча пятьдесят-одна

1 Ответ

0 голосов
/ 24 апреля 2015

Пожалуйста, пройдите http://guides.rubyonrails.org/working_with_javascript_in_rails.html

У меня был похожий случай, и я решил его, используя следующий подход.Когда включается Ajax, я вызываю действие моего контроллера в формате 'js'.Он вернет код из .js.erb.Вы можете иметь JavaScript для обновления вашей таблицы в этом файле.В моем случае мне пришлось добавить результаты поиска, мой файл .js.erb содержал

$("<%= escape_javascript(render :partial => '<action>/user_results', :locals => {:users => @users}) %>").appendTo(".search-results");

При вызове Ajax этот js-ответ выполняется

$.ajax({
  url: '<url>.js',
  type: 'GET'
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...