Маршрут настраиваемого контроллера для обновления активного столбца в false - PullRequest
0 голосов
/ 01 мая 2018

Я пытаюсь установить связь с пользовательским действием маршрута контроллера, и я делаю что-то не так. У меня есть модель документа, которая обрабатывает загрузку документов в мое приложение CRUD. Я хочу, чтобы пользователи могли что-то «удалять», но на самом деле не удалять это из системы, а вместо этого обновлять столбец «активный» на false. Затем, если кто-то с правами администратора может выполнить полное удаление. Этот процесс необходим, потому что приложение проверяется, и мы не хотим случайно удалять загруженные файлы.

Я не могу заставить работать действие по обновлению (удалить). Когда я граблю маршруты, я вижу:

remove_documents PUT      /documents/remove(.:format)                                                             document#remove

В моем файле маршрутов (я сделаю пару похожих маршрутов, которые я хочу добавить позже, поэтому я использовал коллекцию таким образом):

resources :documents do
  collection do
    put "remove", to: "document#remove", as: :remove
  end
end

В индексном представлении документов:

<%= link_to remove_documents_url(document), :method => :put do %>
  <span class="fa fa-trash text-danger"></span>
<% end %>

Мой контроллер:

def remove
  @document = Document.find(params[:id])
  @document.active = false
  @document.save
  html { redirect_to(:back, :notice => 'Document was successfully removed.')}
end

Ссылка работает, но тогда я получаю следующую ошибку:

NameError at /documents/remove.75 uninitialized constant DocumentController

      raise unless e.missing_name? qualified_name_for(parent, const_name)
    end
  end
  name_error = NameError.new("uninitialized constant #{qualified_name}", const_name)
  name_error.set_backtrace(caller.reject {|l| l.starts_with? __FILE__ })
  raise name_error
end
# Remove the constants that have been autoloaded, and those that have been
# marked for unloading. Before each constant is removed a callback is sent

1 Ответ

0 голосов
/ 01 мая 2018

Если вы хотите действие remove для определенного Document, измените маршруты на:

resources :documents do
  member do
    put "remove", to: "documents#remove", as: :remove
  end
end

, что дает вам: remove_document PUT /documents/:id/remove(.:format)
и используйте его как:

<%= link_to remove_document_path(document), :method => :put do %>
  <span class="fa fa-trash text-danger"></span>
<% end %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...