Techioz Blog

ビューからカスタム リソース パスを参照する

概要

ビューからカスタムコントローラーメソッド「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 コードを書く感覚が好きです - まるで英語でテキストを書いているような感じです