2016-03-14 2 views
0

Функциональность в порядке, теперь мне нужно работать с ajax, как отправить форму без загрузки страницы.отправить/получить ID-код контроллера

Это моя работа ниже:

вид:

<%= form_for :accept, url: accept_path(:id => applicants.id), action: :accept, method: :put do |f| %> 
    <%= f.hidden_field :accept, :value => '1' %> 
    <div id="acc" class="btn btn-success">Accept</div> 
<% end %> 

Контроллер:

def accept 
    @accpt = Apply.find(params[:id]) 
    if @accpt.update_attributes(accept_params) 
     flash[:success] = "Accepted" 
     #redirect_to home_path 
    else 
     render 'accept' 
    end 
end 

Ajax:

script type="text/javascript"> 
$(document).on("click", '#acc', function() { 
    $.ajax({ 
     url: "accept", 
     type: "PUT", 
     dataType: "json", 
     data: { id: $(this).id }, 
     complete: function() {}, 
     success: function(data, textStatus, xhr) { 
     editor.setValue(data.file_content) 
     }, 
     error: function() { 
     alert("Ajax error!") 
    } 
    }); 
}); 
</script> 

маршруты

put 'accept/:id' => 'applicants#accept', as: :accept 

Теперь отображается ошибка ajax.

Как я могу найти решение?

+0

Какая ошибка? – RichardAE

+0

Ошибка: 'Не удалось найти Применить с 'id' = id', но без ajax работать должным образом, проблема в загрузке страницы –

+0

добавить': remote => true' в форме –

ответ

0

Я думаю, что вы должны изменить это, чтобы использовать ядро ​​Rails функциональность AJAX - Rails удалила все эти сложности в вашем JS при работе с AJAX :

Избавьтесь от всего настраиваемого javascript AJAX, который вы опубликовали.

Вид:

<%= form_for :accept, url: accept_path(:id => applicants.id), action: :accept, method: :put, remote: true do |f| %> 
    <%= f.hidden_field :accept, :value => '1' %> 
    <%= f.submit 'Accept', class: 'btn btn-success' %> 
<% end %> 

Контроллер:

def accept 
    @accpt = Apply.find(params[:id]) 
    if @accpt.update_attributes(accept_params) 
     render 'accept' 
    else 
     render 'error' 
    end 
end 

Добавить accept.js файл в/Views/controller_name/с:

editor.setValue(data.file_content) 

Добавить файл error.js в/views/имя_контроля/с:

//code for update failed 
+0

Я на самом деле не понимая, что вы сказали –

+0

Rails позволяет использовать AJAX как часть пакета по умолчанию. Пытаясь прочитать эту статью, которая может объяснить это подробнее: http://www.korenlc.com/remote-true-in-rails-forms/ – RichardAE

0

Попробуйте это:

<div id="acc" class="btn btn-success" data-applicant=<%= applicants.id %>>Accept</div> 

и

data: { id: $(this).data("applicant")}, 
Смежные вопросы