2015-04-18 3 views
1

Я пытаюсь перенаправить пользователя на маршрут «посещаемость /: домен», когда параметр из раскрывающегося списка, который я внес, изменился. Я делаю это с помощью javascript. Ранние реализации вроде: window.location = "<%= url_for(:controller => 'attendance', :action => 'index') %>?" + id; просто добавьте идентификатор к предыдущей ссылке, так что если бы у меня было 'attendance/2', это было бы 'attendance/23' вместо 'attendance/3'. Так что я пытаюсь использовать путь предоставленный рубина, как так:Collection_select перенаправление с параметрами с помощью javascript

config.rb:

get 'attendance/:domain', to: 'attendance#index', as: 'attendance_domain' 

вид:

<div class="form-group col-lg-3 col-md-5 "> 
     <%= label_tag(:domain, "Domeniu", class: "control-label") %> 
     <%= collection_select(nil, :id, @domains, :id, :complete_name, {selected: -1}, {:onchange=> "redirectToIndex(this.value)",:selected => params[:domain],class: "form-control"}) %> 
    </div> 

Javascript в виду:

function redirectToIndex(trainerId){ 
    window.location ="<%= url_for(attendance_domain_path(" + trainerId + ")) %>"; 
    } 

В в этой реализации ссылка, на которую я перенаправлен, есть: http://localhost:3000/attendance/ + trainerId +, которая не то, что я хотел. Вместо trainerId это должно быть значение этой переменной. Любые советы, пожалуйста?
В конце мой вопрос: как я могу перенаправить параметры с помощью collection_select. Этот раскрывающийся список будет доступен на одной странице, поэтому параметры должны соответственно меняться, как в описанной выше ситуации.

ответ

1

Просто передайте полный URL-адрес redirectToIndex() от collection_select по телефону proc. Попробуйте это в виду:

<%= collection_select(nil, :id, @domains, -> (d) {attendance_domain_path d}, 
    :complete_name, {selected: -1}, {:onchange=> "redirectToIndex(this.value)", 
    :selected => params[:domain],class: "form-control"}) %> 

В JS:

function redirectToIndex(val){ 
window.location = val; 

}

+0

-> (d) {url_for d}, я заменяю d в этом рельсом? –

+0

'-> (d) {url_for d}' является 'lambda'. Rails вызовет его для каждого элемента в '@ domains', а значение select будет содержать полный URL-адрес, а не только' id'. Просто попробуйте код и взгляните на подготовленный HTML. –

+0

Я получаю что-то вроде синтаксической ошибки, неожиданно tLPAREN_ARG, ожидая ключевое слово_до_LAMBDA или tLAMBEG: D. Дайте мне несколько минут, чтобы попытаться исправить это. –

1

Вы принципиально не можете это сделать - вы не можете вызвать функцию ruby, оцененную serveride с параметром, известным только вашему javascript на время отображения страницы (если, конечно, вы не делаете запрос Ajax).

js-routes камень использует файл маршрутов для создания JavaScript реализации всех названных маршрутов: вы были бы в состоянии сделать

Routes.attendance_domain_path(id) 

В вашем JavaScript. Если это всего лишь один маршрут, это может быть немного переборщиком.

+0

Это 5 маршрутов я думаю: D, но я предполагаю, что массовое убийство еще есть –

+0

да ваше решение отлично работает, но так и Олег и он отправили сначала, я извиняюсь, я тоже не могу проверить ваше. –

Смежные вопросы