我尝试进行new
- 操作,为用户提供表单和create
- 操作来处理它失败,并显示错误消息`。
查看: app / views / studios / new.html.erb:
<%= form_for @studio, url: {action: 'create'} do |f| %>
<%= f.text_field :name %>
<%= f.submit 'Create' %>
<% end %>
控制器: app / controllers / studio_controller.rb:
def new
@studio = Studio.new
respond_to do |format|
format.html
format.json { render json: @studio }
end
end
def create
# TODO
end
路线: config / routes.rb
get 'studios/new' => 'studios#new', :as => 'new_studio'
在尝试访问http://localhost:3000/studios/new
时,我收到了错误
No route matches {:action=>"create", :controller=>"studios"}
如您所见,create
- 操作存在于studios
- 控制器中。为什么会失败?
答案 0 :(得分:3)
它失败了,因为您没有为create
操作定义路由。您只为get
操作定义了new
操作。
更新您的路线文件,将post
路线添加到create
操作中:
post 'studios/create' => 'studios#create'
或者,您可以选择使用资源丰富的路由并将路由文件更新为:
resources :studios, only: [ :new, :create ]
这将为您的new
资源定义create
和studio
路由。要查看生成的路线,您可以运行rake routes
。
答案 1 :(得分:0)
在给定实例变量@studio
的情况下,rails形成帮助器,通过new
操作请求实例变量,并在单击保存时调用create
操作以验证并保存这个新实例。它失败了,因为rails无法找到提交对象的操作。
尝试在resources :studios
(索引,新建,创建,显示,编辑,更新,销毁)中为RESTful路由添加config/routes.rb
,自动路由到app/controllers/studio_controller.rb
<中具有相同名称的操作/ p>
尝试访问表单助手的文档:http://guides.rubyonrails.org/form_helpers.html#binding-a-form-to-an-object以获得更深入的解释。