#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')" ) %>