0

我的 rails 应用程序有一个 CustomerSelectionController,有两个操作:

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这样。它定义了七个默认的 RESTful 路由:索引、显示、新建、创建、编辑、更新和销毁。当您路由到/customer_selection/select时,匹配的路由是“/customer_action/:id”或“show”路由。Rails 实例化您的控制器并尝试在其上调用“显示”操作,并传入一个“选择”ID。

如果您想添加除这些路由之外的路由,则需要显式定义它,并且如果您不想要所有七个路由,您还应该明确说明您想要哪些路由:

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" 

Note that, in the second route, the "customer_select#select" is implied. In a route with only two segments, Rails will default to "/:controller/:action" if you don't specify a controller/action.

于 2013-02-12T18:00:04.327 回答