【问题标题】:Routing Error - No route matches [POST] for new路由错误 - 新路由没有匹配 [POST]
【发布时间】:2012-06-02 15:40:53
【问题描述】:

我遇到了路由错误,我找不到问题出在哪里,我正在创建一个简单的 CRUD,但使用 create 方法遇到了这个问题。

错误

没有路线匹配 [POST] "/usuarios/new"

控制器

def new
  @usuario = Usuarios.new
end 

def create
  @usuario = Usuarios.new(params[:usuario])

  if @usuario.save
    redirect_to usuario_path, :notice => "Cadastrado realizado com sucesso!"
  else
    render "new"
  end
end

new.html.erb

<h1>Add new user</h1>

<%= form_for (:usuario) do |f| %>

<p>
    <%= f.label :name %><br />
    <%= f.text_field :name %>
</p>
<p>
    <%= f.label :idade %><br />
    <%= f.text_field :idade %>
</p>
<p>
    <%= f.label :email %><br />
    <%= f.text_field :email %>
</p>

<p>
    <%= f.submit "send" %>
</p>

<% end %>

【问题讨论】:

  • 只是一些澄清,主要是由于可能不理解该语言。在new 方法中,它可能应该是:@usuario = Usuario.new。在create 方法中,应该是Usuario.new(params[:usuario])。和另一个提到的一样,在redirect_to 上,您需要包含@usario

标签: ruby-on-rails model-view-controller


【解决方案1】:

正如 Flexoid 所指出的,您可能没有在控制器中添加 new 方法。

所以,放这个

def new
  @usuario = Usuario.new
end

编辑

你要多加注意。

看看:

def new
  @usuario = Usuario.new # not Usuarios.new, that's wrong.
end  

def create
    @usuario = Usuario.new(params[:usuario]) # not usuarios, first letter should be capital

    if @usuario.save
        redirect_to usuarios_path, :notice => "Cadastrado realizado com sucesso!" # usuario_path requires an id parameter like `usuario_path(@usuario)` or you could redirect to the `index` with `usuarios_path` 
    else
        render "new"
    end
end

【讨论】:

  • 你应该考虑用英语开始编码,而不是葡萄牙语,特别是如果你需要社区的任何支持。只是一个提示。
  • Usuario 是我的模型而不是 Usuario 的名称,第一个字母是我的错误,我已经编辑了问题。已经将型号名称更改为不带“s”的 Usuario,但仍然相同。
  • 如果您将型号名称更改为Usuario,您还需要在控制器上进行更改。
  • 还要确保您的控制器名称正确,PostsController 而不是 PostController
  • 这次我在一个新项目中用英文再次编写了代码,但我没有收到错误,但知道我在使用 redirect_to 时出错,我收到以下错误,url 转到 localhost:3000 /user 而不是 localhost:3000/users def create @user = User.new(params[:user]) if @user.save redirect_to user_index_path , :notice =&gt; "Cadastrado realizado com sucesso!" else render "new" end end
【解决方案2】:

改变

<%= form_for (:usuario) do |f| %>

<%= form_for (@usuario) do |f| %>

【讨论】:

  • 然后我在 new.html.erb 页面“未定义方法 `usuarios_index_path' for #:0x102b3bc28>”中收到以下错误
  • 表单提交后是否报错?尝试在create方法中将redirect_to usuario_path替换为redirect_to @usuario
  • 我收到新表单中的错误。在 create 方法中更改 redirect_to usuario_path to redirect_to @usuario 时保持相同的错误
  • 您的型号名称是什么:Usuario 或 Usuarios?如果是 Usuario,请确保您没有使用复数形式(@usuario = Usuario.new,不是 Usuarios.new,不是 usuarios.new)
  • 按照 Rails 约定,应该是 Usuario!
【解决方案3】:

好像你忘了配置 Rails 路由器。

尝试将此添加到您的 config/routes.rb 文件中:

resources :usuarios

有关参考,您可以阅读 rails guide Rails Routing from the Outside In

【讨论】:

  • 控制器中有new 方法吗?
  • 是的,我有 - def new @usuario = Usuarios.new end
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多