Доступ к контроллерам Redmine через плагин
Я уже задал вопрос на официальном сайте Redmine, но ответа у меня не получилось, может быть, у меня будет больше шансов.
Я работаю над проектом, и я пытаюсь улучшить существующий плагин для Redmine, добавив некоторые функции к нему, чтобы позволить пользователю загрузите его файлы Dropbox в документы Redmine с помощью простой формы. Redmine уже имеет такую возможность, поэтому я хотел бы использовать контроллер и методы, уже определенные в исходном коде Redmine.
У меня есть следующий код в одном из моих плагинов:
<% html_title "Reddrop - Sync" %>
<h2>Synchronisation page</h2>
<p>Please choose your file</p>
<%= form_tag({:controller => "documents", :action => "add_attachment", :id => @document}, :multipart => true) do %>
<%= file_field_tag 'attachments[dummy][file]', :id => nil, :multiple => true, :onchange => "addInputFiles(this)" %>
<%= submit_tag(value = "Sync this file with Redmine") %>
<% end %>
Я вызываю контроллер "документы" и метод add_attachment
, которые определены в исходном коде Redmine. Когда я отправляю свою форму, я получаю следующую ошибку:
ActionController::RoutingError (No route matches {:controller=>"documents", :action=>"add_attachment", :id=>nil}):
Можно ли вызвать эти контроллеры/методы через плагин, если они определены в исходном коде Redmine?
Если да, возможно, вы могли бы дать несколько советов, как настроить мои маршруты?
Ответы
Ответ 1
См. здесь :id => @document
@document
- это переменная, содержащая nil
, но это должно содержать некоторую id
(например, 1,2 или что-то еще) требуемой записи, чтобы проверить ее на вашем контроллере, и как только вы устраните эту проблему, убедитесь, что эта ошибка будет устранена.
Ответ 2
Перезапишите исходные контроллеры с помощью настраиваемых контроллеров в /app
.
Rails попытается найти сначала контроллер в /app
, а затем, если его не найдет, он будет искать контроллер в драгоценных камнях.
Здесь вы можете проверить исходные контроллеры:
https://github.com/edavis10/redmine/tree/master/app/controllers
Ответ 3
проверить формат маршрута rake | rails route
отправить ожидаемые параметры и правильное пространство имен. Если у вас уже есть @document, вы можете использовать form_for.
`<% form_for(@document, url: {action:'add_attachment'} ) do %> `