ActionController :: UrlGenerationError缺少必需的键:[:id]

时间:2013-07-16 22:00:02

标签: ruby-on-rails ruby

我对ruby非常陌生 - 尝试使用rails并且我已经试图做一个简单的注册表单了:

<%= form_for :user, url: user_path do |f| %>
    <p>
      <%= f.label :email %><br>
      <%= f.text_field :email %>
    </p>

    <p>
      <%= f.label :password %><br>
      <%= f.password_field :password %>
    </p>

    <p>
      <%= f.submit %>
    </p>
<% end %>

这是一个错误:

No route matches {:action=>"show", :controller=>"user"} missing required keys: [:id]

任何人都可以解释这实际意味着什么吗?

编辑:

我正在关注本教程,只将帖子更改为用户:http://guides.rubyonrails.org/getting_started.html

4 个答案:

答案 0 :(得分:1)

form_for应始终获取一个对象..就像来自控制器的用户

# controller
def new
  @user = User.new
end

# form
<%= form_for @user,...

或者您可以使用form_tag方法,该方法不依赖于对象..

答案 1 :(得分:1)

查看您的代码,您正在使用user_path为单个用户创建链接,理想情况下该代码应为user_path(@user),这就是您收到错误请求ID的原因。

在你的情况下,你指定了正确的模型,路径,但你没有实例化一个对象,这就是为什么你得到一个id错误引用show动作,因为user_path需要一个id为您追求的特定用户。

希望这能澄清一些事情。

答案 2 :(得分:1)

我遇到了类似的问题。

控制器名称应为复数(即用户)且

new.html.rb中的第一行应如下所示:

<%= form_for :user, url: users_path do |f| %>

答案 3 :(得分:-2)

我想你的问题已经解决了,但是我想我也会指出,如果你想遵循Rails惯例,你的控制器应该是复数(UsersController):)它让你更容易玩教程你按照你的喜好改变结果!