私は最初の Rails プロジェクトに取り組んでいますが、理解できない問題があります。
Archiveという名前のオブジェクトの Scaffold を生成しました
このオブジェクトにメソッド processfileを追加しました
Archives#Index から前述のメソッドを link_to しようとすると、次のようになります。
undefined method `processfile' for #<Archive:0x702de78>
これはモデルの アーカイブです.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
archives_controller.rbで定義された processfile メソッドには何もありません。「レールの方法」を理解するのに苦労しているので、機能をテストしたかっただけです。
archives_controler.rb
def processfile
# @archive = Archive.find(params[:id])
#do something with the archive
end
全体として、私が最終的に達成したいことは、特定のアーカイブ(インデックス テーブルから取得) に対してprocessfileメソッド を呼び出して、それを処理することです。この例では、メソッド呼び出しを (archive または archive.file を渡さずに) 骨抜きにして実行しましたが、役に立ちませんでした。
私は(Googleとここで)たくさん検索しましたが、おそらく私が新しく、Rails MVCの背後にある概念を完全に理解できないため、私の問題に対処する明確なガイドが見つかりませんでした.
同じコントローラーによってのみアクセスされるメソッドについて何か読んだことがありますが、ヘルパーとして宣言せずにインデックス ビューからコントローラーのメソッドを呼び出すときのサンプル コードを見てきました。o.0
おそらくばかげた混乱であることはわかっていますが、理解できません:(