控制器/动作虽然实际存在但未找到?

时间:2014-04-01 15:50:25

标签: ruby-on-rails

我尝试进行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 - 控制器中。为什么会失败?

2 个答案:

答案 0 :(得分:3)

它失败了,因为您没有为create操作定义路由。您只为get操作定义了new操作。

更新您的路线文件,将post路线添加到create操作中:

post 'studios/create' => 'studios#create'

或者,您可以选择使用资源丰富的路由并将路由文件更新为:

resources :studios, only: [ :new, :create ]

这将为您的new资源定义createstudio路由。要查看生成的路线,您可以运行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以获得更深入的解释。