Ruby on rails 如何创建rails控制器操作?

Ruby on rails 如何创建rails控制器操作?,ruby-on-rails,action,Ruby On Rails,Action,My rails应用程序只有一个CustomerSelectionController,具有两个操作: 索引:显示一个表单,用户可以在其中输入客户信息和 选择:它只显示一个静态页面 class CustomerSelectionController < ApplicationController def index end def select end end 索引视图中的表单如下所示: <h1>Customer Selection</h1>

My rails应用程序只有一个CustomerSelectionController,具有两个操作:

索引:显示一个表单,用户可以在其中输入客户信息和 选择:它只显示一个静态页面

class CustomerSelectionController < ApplicationController
  def index
  end

  def select
  end
end
索引视图中的表单如下所示:

<h1>Customer Selection</h1>

<%= form_tag("customer_selection/select", :method => "get") do %>
  <%= submit_tag("Select") %>
<% end %>
客户选择
“get”)do%>
但是,当我单击浏览器中的“选择”按钮时,我得到的只是:

未知行为

找不到CustomerSelectionController的操作“show”

我不知道它为什么要做一个叫show的动作?我没有在任何地方定义或引用一个

我不知道它为什么要做一个叫show的动作?我没有在任何地方定义或引用一个

是的,你有。这就是
resources
所做的。它定义了七个默认的RESTful路由:索引、显示、新建、创建、编辑、更新和销毁。当您路由到
/customer\u selection/select
时,匹配的路由是“/customer\u action/:id”或“show”路由。Rails实例化您的控制器,并尝试在其上调用“show”操作,传入一个ID“select”

如果要在这些路由之外添加路由,则需要显式定义它,如果不需要所有七条路由,还应显式说明需要哪些路由:

resources :customer_selection, only: %w(index) do
  collection { get :select }
  # or
  # get :select, on: :collection
end
由于路由太少,您也可以只定义它们而不使用
资源

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

请注意,在第二条路线中,隐含了
“customer_select#select”
。在只有两段的路由中,如果您不指定控制器/操作,Rails将默认为“/:controller/:action”。

您是否将客户选择/选择路由到该方法?我是否可以删除资源行,然后让约定接管配置?不,您仍然需要定义路由。不过,您不必使用
资源
,请参阅我的更新答案。好的,我在哪里可以获得关于该代码块的简明解释?很酷,我更喜欢您的第二个选项。我能读。谢谢。Rails路由指南,如您问题的评论中所链接:
get "/customer_selection" => "customer_selection#index"
get "/customer_select/select"