未定义的方法user_path'的form_for

时间:2015-07-11 07:10:36

标签: ruby-on-rails

我有一个UsersController,它有以下代码

def sign_up
@user = User.new
end

我的观看页面已

<div class="col-md-6 col-md-offset-3">
    <%= form_for @user do |f| %>
      <%= f.label :first_name%>
      <%= f.text_field :first_name %>
      <%= f.label :last_name %>
      <%= f.text_field :last_name %>
      <%= f.submit "Register", class: 'btn btn-primary'%>
    <% end %>
  </div>

我的routes.rb文件包含以下条目

 get 'signup' => 'users#sign_up'

但是当我提交表格时,它说

ActionView::Template::Error (undefined method `users_path' for #<#<Class:0x00000004d91490>:0x00000004d90220>)

为什么这会抛出一个错误,我是否需要明确指向form_for中的url?为什么会这样?

2 个答案:

答案 0 :(得分:3)

将您的路线更改为:

resources :users, only: [:new, :create], path_names: {new: 'sign_up'}

并将sign_up操作重命名为new。您收到错误的原因是rails尝试猜测给定资源的正确URL。由于您已通过@user User类的实例,因此会尝试调用"#{@user.class.model_name.route_key}_path键,从而导致出现错误。

要解决此问题,您需要使路线定义users_path,或者需要使用url选项直接指定网址。 users_path可以由indexcreate操作定义,因此上述解决方案可以正常工作(并且不会创建剩余的CRUD路由,是的!)

答案 1 :(得分:1)

尝试更改此行:

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

到此:

<%= form_for(@user, url: 'signup') do |f| %>