0

私の Rails アプリには単一の CustomerSelectionController があり、次の 2 つのアクションがあります。

index: ユーザーが顧客情報を入力して選択できるフォームを表示します: 静的ページを表示するだけです。

class CustomerSelectionController < ApplicationController
  def index
  end

  def select
  end
end

routes.rb ファイルに次のエントリを作成しました。

  resources :customer_selection

インデックス ビューのフォームは次のようになります。

<h1>Customer Selection</h1>

<%= form_tag("customer_selection/select", :method => "get") do %>
  <%= submit_tag("Select") %>
<% end %>

ただし、ブラウザーの [選択] ボタンをクリックすると、次のようになります。

不明なアクション

CustomerSelectionController のアクション「表示」が見つかりませんでした

show というアクションを実行しようとしている理由がわかりません。どこにも定義も参照もしていません。

4

1 に答える 1

1

show というアクションを実行しようとしている理由がわかりません。どこにも定義も参照もしていません。

はいあなたが持っています。それresourcesがそうです。これは、index、show、new、create、edit、update、および destroy の 7 つのデフォルトの RESTful ルートを定義します。にルーティングする場合/customer_selection/select、一致するルートは「/customer_action/:id」または「show」ルートです。Rails はコントローラーをインスタンス化し、「select」の ID を渡して、そのコントローラーで「show」アクションを呼び出そうとします。

これらに加えてルートを追加する場合は、それを明示的に定義する必要があります。また、7 つすべてが必要ない場合は、どのルートが必要かを明示的に指定する必要があります。

resources :customer_selection, only: %w(index) do
  collection { get :select }
  # or
  # get :select, on: :collection
end

ルートが非常に少ないため、を使用せずにルートを定義することもできますresources

get "/customer_selection" => "customer_selection#index"
get "/customer_select/select" 

2 番目のルートでは、"customer_select#select"が暗示されていることに注意してください。セグメントが 2 つしかないルートでは、コントローラー/アクションを指定しないと、Rails はデフォルトで "/:controller/:action" になります。

于 2013-02-12T18:00:04.327 に答える