ActionController:: ошибка маршрутизации: маршрут не совпадает -> при использовании checkbox ajax

#ruby-on-rails #ruby-on-rails-3

#ruby-on-rails #ruby-on-rails-3

Вопрос:

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

Вот код, который я придумал:

 <%= check_box_tag "id", "id", task.done, 
    :onclick => remote_function(
      :update => "task", 
      :url => { :action => :update, :controller => :tasks, :id => task.id }, 
      :with => "'task[done]=true'", 
      :complete => "alert('hi')"  ) %>
  

Он выводит флажок и проверяет его автоматически в зависимости от статуса task.done. Но когда я запускаю onclick и просматриваю журналы, я вижу следующую запись:

Начал ПУБЛИКАЦИЮ «/tasks /20» для 127.0.0.1 в 2011-04-25 23:15:44 -0300 ActionController::ошибка маршрутизации (маршрут не совпадает с «/ tasks / 20»):

Просматривая мой файл config / routes.rb, у меня есть:

  resources :tasks
  

Можете ли вы помочь мне разобраться, что я делаю не так? Почему маршрут не найден?

Вот полный код для представления _task.html.erb.

 <tr>
  <td class="task">
    <span class="tasktitle">


<%= check_box_tag "id", "id", task.done, 
    :onclick => remote_function(
      :update => "task", 
      :url => { :action => :update, :controller => :tasks, :id => task.id }, 
      :with => "task[done]=true", 
      :complete => "alert('hi')"  ) %>



<span class="<%= if (task.done) then "editable_field_complete" else "editable_field" end %>" id="task_title_<%= task.id %>">
<%= best_in_place task, :title, :type => :input %>
</span>
</span>
    <span class="taskdelete"><%= link_to "delete", task, :method => :delete, :class => "delete",
                                     :confirm => "You sure?",
                                     :title => task.title %></span>
    <span class="taskcreated">
      Created <%= time_ago_in_words(task.created_at) %> ago.
    </span>
  </td>
</tr>
  

Большое спасибо, ребята

Ответ №1:

Проблема, похоже, в том, что remote_function отправляет данные с помощью протокола POST, но когда вы используете ресурсы в routes.rb, тогда он принимает протокол PUT только при вызове действия обновления.

Попробуйте добавить следующий параметр в вашу remote_function:

 :method=>:put
  

Таким образом, конечный результат будет:

 <%= check_box_tag "id", "id", task.done, 
    :onclick => remote_function(
    :update => "task", 
    :url => { :action => :update, :controller => :tasks, :id => task.id }, 
    :method => :put,
    :with => "task[done]=true", 
    :complete => "alert('hi')"  ) %>