加载新操作会产生奇怪的错误

时间:2013-01-21 04:44:42

标签: ruby-on-rails

我正在尝试创建一个登录系统。我的UserController用它来控制new动作:

def new
    @user = User.new

    respond_to do |format|
        format.json { render :json => @user }
        format.html
    end
end

和我的routes.rb有这个链接:

resources :user

用于创建新用户的View的表单是:

<%= form_for @user do |f| %>

但是,我收到一个动作控制器错误:

undefined method `users_path' for #<#<Class

令我感到困惑的是它使用users_path的原因。这是对我的路线的复数参考。为什么它返回user_path的复数错误?当我路由`资源:用户'它清除错误,但当然我没有任何设置该资源,因此产生其他错误。

2 个答案:

答案 0 :(得分:2)

form_for内,它会根据模型是否持久来创建适当的操作和方法。

如果模型未加载,则会创建:new的行为和:post的方法。如果它被保留,那么它将是:update:put

对于:new,默认网址为“/ users”,而:edit则为“/ users /:id”。

解决方案正如吉姆所说。 (打败我。)将一个网址选项应用于form_for

答案 1 :(得分:1)

resources :users实际上是正确的结构,因为它是用户的集合,而不是单个用户。路径构造还期望多路径(IIRC,它期望多路径,除非它找到resource,而不是resources路由),因此尝试使用users_path

传递一个显式的url参数是另一个选项<%= form_for @user, :url => user_path do |f| %>,因为你已经有了期望奇异路径的东西