Я работаю над своим первым проектом рельсов, и у меня есть проблема, которую я просто не могу понять.Метод Доступность/Область действия - NoMethodError
Я создал помост для объекта с именем Архива
к этому объекту Я добавил метод ProcessFile
при попытке link_to указанного способ из архивов # Индекса Я получаю это:
undefined method `processfile' for #<Archive:0x702de78>
Это модель archive.rb
class Archive < ActiveRecord::Base
belongs_to :users
attr_accessible :file, :user_id
mount_uploader :file, FileUploader
end
Это код на index.html.erb (принадлежащих к архивам)
<% @archives.each do |archive| %>
<tr>
<td><%= archive.file%></td>
<td><%= User.find(archive.user_id).name %></td>
<td>
<%= link_to 'Download', archive.file_url %>
::
<%= link_to 'Show', archive %>
::
<%= link_to 'Edit', edit_archive_path(archive) %>
::
<%= link_to 'Delete', archive, confirm: 'Esta Seguro?', method: :delete %>
::
<%= link_to "Process", archive.processfile %>
</td>
</tr>
<% end %>
Это routes.rb линия:
match "archives/processfile/:id" => "archives#processfile", :as => :processfile
ProcessFile метод, определенный whitin archives_controller.rb ничего не имеет, я просто хотел проверить функционал у, так как я с трудом получаю сцепление «рельсы пути»
archives_controler.rb
def processfile
# @archive = Archive.find(params[:id])
#do something with the archive
end
В общем, что я в конечном счете хочу добиться того, чтобы позвонить в ProcessFile по заданному архиву (взято из индексной таблицы), чтобы что-то сделать с ним. В этом примере я опустил вызов метода (не передавая ему архив или файл archive.file), чтобы запустить его, но безрезультатно.
Я много искал (на Google и здесь) и не нашел четкого руководства, которое могло бы решить мою проблему, вероятно, потому что я новичок и не могу полностью понять концепции, лежащие за рельсами MVC.
Я читал кое-что о методах, к которым обращаются только те же самые контроллеры, но я видел пример кода, когда люди вызывают методы на контроллерах из представлений индексов, не объявляя их как помощники. o.0
Я знаю, что это, вероятно, глупая путаница, но я не могу понять :(
Это действительно вызовет исключение. Вам нужно изменить 'archive_processfile_path' на' processfile_path' уведомление, что у него есть 'as: processfile'. Значение маршрута не основано на имени ресурса. –
Хороший улов - я думал, что плакат использовал RESTful routing. Путь должен действительно быть «processfile_path», как указывает указанный маршрут. Обновлено, чтобы отразить. – zeantsoi
Это на самом деле моя ошибка при размещении вопроса, изначально метод и вызов link_to использовали archive.id, но я испортил его, пытаясь заставить его работать без него, я в конечном итоге испортил мой код, отображающий этот вопрос. coul Вы показываете мне, какой был бы RESTful способ достичь того, что я пытаюсь сделать? –