2010-02-02 3 views
0

У меня есть веб-сайт, и до того, как я включил дизайн и некоторые изменения (макет, скрипты и т. Д.), Он работал нормально. Затем я не знаю, что произошло, но метод onChange из моего поля выбора обращается к действию «show», а не тому, что написано в строке.Поле доступа к неправильному действию контроллера на onChange

У меня есть следующие в моем Новый взгляд:

<%= collection_select('category', 'id', @categories, 'id', 'name', {:prompt => "Choose a category"}, {:onchange => "#{remote_function(:url => {:controller => 'announcements', :action => "update_subcategories"}, :with => "'parent_id='+value")}",:class => 'newAd_box2_inputField'}) %> 

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

Второй выберите выглядит следующим образом:

<%= render :partial => 'category_select', :object => @subcategories %> 

Опять же, это работает большой, прежде чем я внес некоторые изменения, но теперь он просто не будет идти к действию «update_subcategories», он просто идет в «шоу ».

В моем routes.rb я получил следующее:

map.show "/announcements/:permalink", :controller => 'announcements', :action => 'show' 
    map.new "/announcements/new", :controller => 'announcements', :action => 'new' 

Кто-нибудь знает, что происходит?

+0

У вас все еще есть маршрут для 'AnnouncementsController # update_subcategories'? В файле 'routes.rb', который вы отправили, есть только маршруты в« АнонсыController # show »и« AnnouncementsController # new ». Как выглядит сгенерированный Javascript/HTML для представления 'new'? –

ответ

1

Это ваша проблема .:

map.show "/announcements/:permalink", :controller => 'announcements', 
    :action => 'show' 

Rails будет использовать первый маршрут появится в routes.rb, который соответствует параметрам данные. Такое поведение срабатывает как при генерации URL-адресов для вывода с помощью url_for (что и является параметром: url для remote_function в фоновом режиме), так и для сопоставления URL-адресов, полученных сервером, действиями.

Вышеуказанный маршрут будет генерировать маршрут /announcments/update_subcategories, поэтому ссылка будет отображаться прямо при просмотре источника источника в вашем браузере. Но когда вы перейдете к этой ссылке, Rails будет соответствовать ее действию show action контроллера объявлений.

Исправление зависит от того, какой метод вы используете для определения маршрутов для контроллера объявлений. Независимо от того, какое исправление вы используете, оно должно пройти до плохого маршрута. (map.show "/announcements/:permalink", :controller => 'announcements', :action => 'show')

Если вы используете спокойные маршруты, то исправление заключается в добавлении опции: collection в определение.

map.resources :announcements, :collection => {:update_subcategories => :get} 

Если вы не используете спокойные маршруты, исправить это, чтобы добавить маршрут.

map.connect "/announcements/update_subcategories", 
    :controller => "announcements", :action => "update_subcategories" 
+0

Я попробую, спасибо. –

+0

Это сработало! Спасибо!! –