Выпадающее меню (созданное select_tag) в моем приложении должно вызывать действие категории фильтра, как только пользователь изменяет значение в выпадающем меню И нажимает кнопку «Go» ,RJS: Использование watch_field on select_tag
Теперь я хотел бы избавиться от кнопки «Перейти» и иметь наблюдателя (наблюдаемое_поле?), Вызывать действие категории фильтра, как только пользователь изменит значение в раскрывающемся меню.
Ниже вы видите код, который я написал. Он работает с помощью кнопки Go'-Button, но не работает, просто изменив значение в раскрывающемся меню. Что случилось с моим помощником наблюдения_категории?
View-парциальное с выпадающего меню и список проектов
<!-- drop down menu -->
<% form_tag(filter_category_path(:id), :method => :post, :class => 'categories') do %>
<label>Categories</label>
<%= select_tag(:category, options_for_select(Category.all.map {|category| [category.name, category.id]}, @category_id)) %>
<!-- i would like to get rid of this button -->
<%= submit_tag "Go" %>
<% end %>
<!-- list of projects related to categories chosen in drop down menu -->
<ul class="projects">
<% @projects.each do |_project| %>
<li>
<%= link_to(_project.name, _project) %>
</li>
<% end %>
</ul>
<%= observe_category_select -%>
HelperMethod
def observe_category_select
observe_field(
:category,
:url => filter_category_path(:id),
:with => 'category',
:on => 'change'
)
end
Javascript-Вывод HelperMethod
<script type="text/javascript">
//<![CDATA[
new Form.Element.EventObserver('category', function(element, value) {
new Ajax.Request('/categories/id/filter', {asynchronous:true, evalScripts:true, parameters:'category=' + encodeURIComponent(value) + '&authenticity_token=' + encodeURIComponent('edc8b20b701f72285068290779f7ed17cfc1cf8c')})
}, 'change')
//]]>
</script>
Категории контроллер
class CategoriesController < ApplicationController
def show
@category = Category.find(params[:id])
@category_id = @category.id
@projects = @category.projects.find(:all)
respond_to do |format|
format.html # index.html.erb
end
end
def index
@projects = Category.find(params[:id]).projects.find(:all)
respond_to do |format|
format.html # index.html.erb
end
end
def filter
@category = Category.find(params[:category])
@category_id = @category.id
@projects = @category.projects.find(:all)
respond_to do |format|
format.html # index.html.erb
end
end
конец
Вывод «рейк маршрутов | Grep фильтр»
filter_category POST /categories/:id/filter {:controller=>"categories", :action=>"filter"}
formatted_filter_category POST /categories/:id/filter.:format {:controller=>"categories", :action=>"filter"}
Проблема по-прежнему сохраняется. Согласно Firebug, запрос AJAX отлично подходит: отправляет категорию-значение в .../categories/id/filter – Javier
Я запускал рельсы-отладчик на localhost, и все действие фильтра работает так, как должно. Кажется, что все работает хорошо, но список с проектами ниже выпадающего меню не меняется, как ожидалось. Любой другой намек? – Javier
... хотя @category, @category_id и @projects имеют значения, которые они должны перед ответом. – Javier