2015-10-07 3 views
0

У меня есть рубин код, который вызывает метод, чтобы принять кандидат на вакансию, как это:JQuery .replacewith рубинового кода

<%= link_to "Accept", accept_candidate_path(vacancy_id: @vacancy.id, employee_id: e.id), method: :post, :remote => true, :id => "link_#{i}" %> 

Метод изменяет состояние в базе данных общепринятого.

После того, что нажата, я хочу заменить, что со следующим рубиновый код:

<%= link_to "Cancel", back_to_pending_path(vacancy_id: @vacancy.id, employee_id: e.id), method: :post, :remote => true%> 

У меня также есть если/другое, что проверяет состояние кандидата, чтобы отобразить либо ссылки. Но это вызвано только обновлением страницы, и я просто хочу, чтобы она приняла ее, измените кнопку без полного обновления страницы.

В настоящее время у меня есть это:

$("[id^='link_']").click(function (event) { 
    $(this).replaceWith("Accepted") 
}); 

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

+1

У вас здесь довольно много вариантов. 1) показать/скрыть обе ссылки и просто переключить их в зависимости. i.e .: show accept; при нажатии кнопки «Принять», «Скрыть» и «Отменить». 2) добавьте файл 'accept.js.erb' и добавьте здесь javascript. «Ненавязчивый javascript» - http://edgeguides.rubyonrails.org/working_with_javascript_in_rails.html#server-side-concerns 3. Обработайте ссылку через AJAX в файле javascript и верните частичный (через контроллер) новый канал. потребуется некоторое время, чтобы набрать все эти примеры, но я хочу, если вы захотите. –

+1

использовать атрибут данных на элементах и ​​прочитать это значение – charlietfl

+1

Да, я должен был включить это в свой список @charlietfl. И чтобы добавить атрибут data, вы можете даже сгруппировать методы контроллера в один и принять/отменить в зависимости от текущего состояния, поэтому вам не придется менять большую клиентскую сторону. –

ответ

1

он работает совершенно нормально с простым текстом, но мне нужен текст, который будет встроенным рубином. Это возможно?

Вы должны создать .js файлов для вашего действия, где вы можете изменить HTML ссылки с путями, а

например создать accept_candidate.js.erb и добавить формат respond_to расслоения плотного он будет делать трюк

# accept_candidate.js.erb 
$("[id^='link_']").html("<%= escape_javascript(render('cancel_link')) %>") 


# _cancel_link.html.erb 
<%= link_to "Cancel", back_to_pending_path(vacancy_id: @vacancy.id, employee_id: e.id), method: :post, :remote => true%> 
+0

Спасибо за ваш ответ, одна небольшая проблема там, я получаю employee_id в цикле в моем представлении и, таким образом, получаю ошибку неопределенной локальной переменной или метод 'e 'для # <# <: 0x007fdd840e2ab8>: 0x007fdd83ca80b0> с параметры employer_id и vacancy_id, и мне нужен employee_id, а также указать правильную строку для изменения. –

+2

вам нужно установить объект '@ employee' из действия accept/candid, чтобы он был доступен в ваших представлениях, а затем изменил' e.id' на '@ employee.id' –

+0

Работает как очарование! Благодаря! –