我一直收到上面提到的错误,即使我的表单对象与我的控制器对象匹配(大多数有这个问题的人在类似的问题中混合了他们的对象)。我到底错在了什么?
我的代码如下:
<!-- The form is here -->
<%= form_for(@user), url: {action: "/users/signup"}, html: {class: "signup_form"} do |f| %>
<%= label_tag(:firstname, "Firstname: ") %>
<%= f.text_field :firstname %>
<%= label_tag(:lastname, "Lastname: ") %>
<%= f.text_field :lastname %>
<%= label_tag(:username, "Username: ") %>
<%= f.text_field :username %>
<%= label_tag(:email, "Email: ") %>
<%= f.text_field :email %>
<%= label_tag(:password, "Password") %>
<%= f.password_field :password %>
<%= f.submit "Create Account" %>
<% end %>
这是控制器:
class UsersController < ApplicationController
def create
@user = User.new(user_params)
@user.save
redirect_to @user
end
private
def user_params
params.require(:user).permit(:firstname, :lastname, :username,
:email, :password)
end
end
非常感谢一些帮助,如果我在这里错过了一些愚蠢的事情,请提前感谢。
答案 0 :(得分:0)
为什么表格中有url: {action: "/users/signup"}
?如果您执行以下操作会更简单:
<强>的routes.rb 强>
Rails.application.routes.draw do
resources :user
end
<强>视图/用户/ _form.html.erb 强>
<%= form_for(@user), html: {class: "signup_form"} do |f| %>
controllers / users_controller.rb (添加以下内容)
class UsersController < ApplicationController
def new
@user = User.new
end
end
如果您这样做,form_for
将自动检测@user
对象是否已保存在数据库中,并将表单路由到create
或{{ 1}}方法。
我是一般的我不建议改变标准的RESTful路线,除非绝对必要。用户不太可能在URL中查看update
并感到不安或困惑。
答案 1 :(得分:0)
<强> users_controller.rb 强>
class UsersController < ApplicationController
def new
@user = User.new
end
def create
@user = User.new(user_params)
respond_to do |format|
if @user.save
format.html { redirect_to @user, success: 'Thanks for signing up!' }
format.json { render :show, status: :created, location: @user }
else
format.html { render :new }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
end
用户/ _form.html.erb 强>
<%= form_for(@user) do |f| %>
<div class="field">
<%= f.label :first_name, "First name" %><br>
<%= f.text_field :first_name %>
</div>
<div class="field">
<%= f.label :last_name, "Last name" %><br>
<%= f.text_field :last_name %>
</div>
<div class="field">
<%= f.label :email, "Email" %><br>
<%= f.text_field :email %>
</div>
<div class="field">
<%= f.label :password, "Password" %><br>
<%= f.password_field :password %>
</div>
<div class="actions">
<%= f.submit "Sign Up" %>
</div>
<% end %>