Как правильно отправлять обратно информацию о событии onclick для флажка (RoR3)

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

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

Вопрос:

Я начинаю с RoR, и это моя первая попытка использовать новую remote_function. У меня есть что-то вроде приложения для управления проектами, поэтому у вас есть проекты (потоки), и у них есть несколько задач. Внутри представления stream show я хочу перечислить задачи с флажком рядом с ними. Если пользователь нажимает на флажок, я хочу опубликовать в /tasks/3 отправка выполнена = true, чтобы запись, вероятно, была обновлена.

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

<%= check_box_tag «id», «id», задача.выполнено, :onclick => remote_function( :update => «задача», :url => { :action => :update }, :with => «‘сделано=true'», :завершено => «оповещение(‘привет’)») %>

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

ActionController::RoutingError (Маршрут не соответствует «/ streams / 3»):

«/ streams / 3» звучит неправильно, я бы действительно ожидал увидеть что-то вроде /tasks / id вместо этого.

Можете ли вы помочь мне выяснить, что я делаю неправильно?

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

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


<%= check_box_tag "id", "id", task.done, 
    :onclick => remote_function(
      :update => "task", 
      :url => { :action => :update }, 
      :with => "'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:

Причина ошибки: Забыл упомянуть подсказку указателя контроллера:http://api.rubyonrails.org/classes/ActionDispatch/Routing/UrlFor.html Всегда обращайтесь к api для rails, это очень полезно для меня.

Комментарии:

1. Я добавил свойство controller, а также свойство ID с идентификатором задачи, и теперь я вижу, что оно отправляется в нужное место, но когда я просматриваю журналы, я все еще вижу это сообщение об ошибке: ActionController::RoutingError (Маршрут не соответствует «/ tasks / 20»): Я проверил свой файл конфигурации / маршрутов и вижу, что я правильно определил ресурсы: задачи . Что еще я могу упустить?

Ответ №2:

Находится ли флажок в представлении «поток»?

Просто напишите :url => { :action => :update, :controller => 'tasks'} . Это должно решить вашу проблему.

Комментарии:

1. Я добавил свойство controller, а также свойство ID с идентификатором задачи, и теперь я вижу, что оно отправляется в нужное место, но когда я просматриваю журналы, я все еще вижу это сообщение об ошибке: ActionController::RoutingError (Маршрут не соответствует «/ tasks / 20»): Я проверил свой файл конфигурации / маршрутов и вижу, что у меня правильно определены ресурсы: задачи. Что еще я могу упустить?

2. не могли бы вы, пожалуйста, добавить свой routes.rb в свой пост? и можете ли вы получить доступ к / tasks / 20 с помощью своего браузера?