我正在尝试创建一个登录系统。我的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
的复数错误?当我路由`资源:用户'它清除错误,但当然我没有任何设置该资源,因此产生其他错误。
答案 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| %>
,因为你已经有了期望奇异路径的东西