Поле доступа к неправильному действию контроллера на onChange - PullRequest
0 голосов
/ 02 февраля 2010

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

В моем новом представлении есть следующее:

<%= 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", оно просто переходит к "show".

В моем route.rb есть следующее:

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

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

1 Ответ

1 голос
/ 02 февраля 2010

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

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

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

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

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

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

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

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

map.connect "/announcements/update_subcategories", 
  :controller => "announcements", :action => "update_subcategories"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...