рельсы: данные удаляются при перезагрузке страницы - PullRequest
0 голосов
/ 20 октября 2010

В моем помощнике приложения есть метод, предназначенный для деактивации задачи в моей базе данных.

Помощник приложения:

  def link_to_destroy_task(task_id)
    Task.find(task_id).deactivate
  end

Модель:

def self.deactivate()
  update_attribute(:active, false)
end

Просмотр:

<ol id="tasks">
  <% @Tasks.each do |task| %>
      <%content_tag_for :li, task do %>
      <span class ="handle"> [drag] </span>
      <%= link_to task.name, :controller => "com_tasks", :action => "edit", :id => task.id %>
      <%= link_to_function '[Delete]', link_to_destroy_task(task.id) %>
    <% end %>
  <% end  %>
</ol>

По какой-то причине при загрузке страницы она удаляет все из списка.Не просто переключение между активным и ложным.Он полностью стирает его из базы данных.

Я использую приборы, поэтому я перезагружаю все тестовые данные, и я могу один раз обновить, чтобы увидеть данные снова, но в следующий раз, когда я перезагружаю их, нет.1014 *

Я изменил название метода на «деактивировать», потому что я думаю, что уничтожение уже выполнено, но метод все еще выполняется без щелчка.Он больше не удаляется, но деактивирует все.

Ответы [ 2 ]

1 голос
/ 20 октября 2010

Это происходит потому, что вы звоните deactivate по вашему мнению для каждого предмета! Второй параметр вашей функции link_to_function выполняет фактическую деактивацию.

Я думаю, вы неправильно понимаете link_to_function - он не запускает функцию ruby ​​при нажатии, он запускает созданную вами функцию javascript Второй параметр должен быть строкой, содержащей функцию javascript. Rails не сможет запустить метод ruby ​​в чьем-либо браузере.

Вот ссылка на документацию, которая поможет вам выбрать правильный путь:

http://apidock.com/rails/ActionView/Helpers/JavaScriptHelper/link_to_function

1 голос
/ 20 октября 2010

Обратите внимание на эту строку

<%= link_to_function '[Delete]', link_to_destroy_task(task.id) %>

Вы фактически выполняете здесь функцию link_to_destroy_task, по одному разу для каждой задачи.

Из документов

def link_to_function (name, * args, & block)
Возвращает ссылку с указанным + name +, которая запускает функцию JavaScript + с помощью обработчика onclick и возвращает false после факта.

Никогда не использовал этот метод, но, похоже, его цель - вызвать функцию JavaScript, а не функцию Ruby.
Также есть примеры.

...