Обновленный пример
Я использую поле выбора в качестве навигации. Когда Я выбираю пункт, я хотел бы быть перенаправлен на эту страницу.
= select (@organization, "tabs", @organization.tabs.collect { |t| t.title }, {} { :onchange => "escape_javascript(#{ render edit_organization_tab_path(@organization, this.value)})"} )
Так что этот пример не работает, потому что я не уверен, как передать переменную Javascript в Ruby
Возможно ли сделать это полностью в Ruby? Или я должен использовать jQuery?
Если вы используете jQuery, вы можете сделать это примерно так:
= select(@organization, "tabs", @organization.tabs.collect { |t| [ t.title, edit_organization_tab_url(t) ] }, { }, :onchange => "window.location.href=$(this).val()")
Значением для каждого элемента в списке выбора должен быть URL-адрес, на который вы хотите перенаправить пользователя.
Я не совсем понимаю, что вы имели в виду, помещая вызов рендеринга Rails внутри блока JavaScript.
Задумывались ли вы, как это может ухудшиться, если у пользователя не включен JavaScript? В идеале элементы ссылки должны быть доступны как обычные элементы
, чтобы пользователь мог посещать страницу без JS. Тем более, что ваше поле выбора контролирует навигацию по сайту, я бы порекомендовал решение «прогрессивного улучшения» и сначала напишите разметку без JS, а затем добавьте поверх нее поведение JS. Вам могут понадобиться некоторые элементы CSS и
, которые напоминают поле выбора, но не являются буквально полем выбора, таким образом у вас будет больше контроля над содержимым. Пара других вещей, как указал тэдман, перенаправление пользователя в JavaScript сводится к установке window.location
. Если вы используете jQuery, отметьте событие изменения , которое вы можете прикрепить к событиям выбора в вашем поле со списком, и перенаправьте пользователя при необходимости. Наконец, используя CSS3 border-radius
и другие свойства, вы можете создать что-то, очень похожее на поле выбора, но с гораздо большей функциональностью. Вы также можете найти подобный компонент, поискав в Google этот пример .
Вам не нужен jQuery, но вам понадобится Javascript. В конечном итоге вам нужно будет либо использовать (и, возможно, создать) помощника, который создаст готовое для навигации поле выбора (включая необходимый код Javascript), либо добавить прослушиватели событий к вашему выбору непосредственно в вашем представлении (встроенном или во включенном скрипте) .