ビューからカスタム リソース パスを参照する
概要
ビューからカスタムコントローラーメソッド「load」を呼び出したいと思います。ビュー内で呼び出すパスをどのように呼び出すべきかを理解するのに苦労しています。私のroutes.rbには次のコードがあります。
Rails.application.routes.draw do
resources :merchants_files, except: [:edit] do
member do
post 'load', :as => :load
end
end
Merchants_files_controller.rb コントローラーには次のアクションがあります。
def load
CSV.foreach(@merchants_file.merchants_csv, headers: true, col_sep: ";") do |merchant|
Merchant.create!(merchant.to_hash)
end
respond_to do |format|
format.html { redirect_to merchants_files_url, notice: "Merchants loaded." }
end
end
表示ビューで、アクションをロードするための正しいパスを参照しようとします。
<p style="color: green"><%= notice %></p>
<%= render @merchants_file %>
<div>
<%= link_to "Back to merchants files", merchants_files_path %>
<%= button_to "Load the merchants file", merchants_file_load_path, method: :post %>
<%= button_to "Destroy this merchants file", @merchants_file, method: :delete %>
</div>
Merchants_file_load_path 以外の別のパス名を試してみましたが、常にこの名前の変数が存在しないというエラーが表示されます。ビューからカスタム パスを参照するにはどうすればよいですか?カスタム コントローラー アクションを適切に登録し、ビュー内のカスタム パス変数でそれを参照する方法を理解するのに苦労しています。
Rails7.0.6を使用しています
解決策
私自身それを発見しました。まず、コードを次のように単純化しました。
Rails.application.routes.draw do
resources :merchants_files, except: [:edit] do
member do
post :load
end
end
次に、これが私の作業ビューです。
<p style="color: green"><%= notice %></p>
<%= render @merchants_file %>
<div>
<%= link_to "Back to merchants files", merchants_files_path %>
<%= button_to "Load the merchants file", load_merchants_file_path, method: :post %>
<%= button_to "Destroy this merchants file", @merchants_file, method: :delete %>
</div>
Rails コードを書く感覚が好きです - まるで英語でテキストを書いているような感じです