Ruby on rails 如何创建rails控制器操作?
My rails应用程序只有一个CustomerSelectionController,具有两个操作: 索引:显示一个表单,用户可以在其中输入客户信息和 选择:它只显示一个静态页面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>
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"