我有一个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?为什么会这样?
答案 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
可以由index
或create
操作定义,因此上述解决方案可以正常工作(并且不会创建剩余的CRUD路由,是的!)
答案 1 :(得分:1)
尝试更改此行:
<%= form_for @user do |f| %>
到此:
<%= form_for(@user, url: 'signup') do |f| %>