0

我正在尝试创建一个登录系统。我的 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| %>

但是,我收到一个 Action Controller 错误:

undefined method `users_path' for #<#<Class

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

4

2 回答 2

2

它在内部form_for根据模型是否持久化创建适当的操作和方法。

如果一个模型是非持久化的,它将创建一个动作:new和方法:post。如果它被持久化,那么它将是:update:put而不是。

:new默认 url 是“/users”,默认是“ / :editusers/:id”。

正如吉姆所说,解决办法是。(击败我。)将 url 选项应用于form_for.

于 2013-01-21T04:57:34.247 回答
1

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

传递显式 url 参数是另一种选择<%= form_for @user, :url => user_path do |f| %>,因为您已经有了期望单一路由的东西

于 2013-01-21T04:49:14.980 回答