【发布时间】:2016-01-18 21:53:24
【问题描述】:
我为我的站点创建了一个注册表单,并在我的 users_controller.rb 文件中包含了以下参数,以便将输入到相应字段中的数据保存到我的数据库中。出于某种原因,当我尝试提交我创建的注册表单时,控制台告诉我名字和姓氏是不允许的参数。错误是:
不允许的参数:名字,姓氏
注册成功,其他参数输入数据库就好了;但是 firstname 和 lastname 列保持为空。
users_controller.rb
class UsersController < ApplicationController
def create
@user = User.new(user_params)
if @user.save
flash[:success] = "You signed up successfully"
flash[:color] = "valid"
redirect_to @user
else
flash[:notice] = "Form is invalid"
flash[:color] = "invalid"
render "new"
end
end
private
def user_params
params.require(:user).permit(:firstname, :lastname, :email, :password, :password_confirmation)
end
def show
@user = User.find(params[:id])
end
def new
end
end
new.html.erb
<%= form_for(:user, :url => {:controller => 'users', :action => 'create'}) do |f| %>
</br> <%= f.text_field :firstname, placeholder: 'First Name' %>
</br> <%= f.text_field :lastname, placeholder: 'Last Name' %>
</br> <%= f.text_field :email, placeholder: 'Email' %>
</br> <%= f.password_field :password, placeholder: 'Password' %>
</br> <%= f.password_field :password_confirmation, placeholder: 'Confirm Password' %>
<%= f.submit :Register %>
<% end %>
schema.rb
create_table "users", force: :cascade do |t|
t.string "firstname"
t.string "lastname"
t.string "email"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "password_digest"
t.string "password"
end
user.rb
class User < ActiveRecord::Base
has_secure_password
validates_length_of :password, :in => 6..20, :on => :create
validates :password_confirmation, presence: true, if: -> { new_record? || changes["password"] }
end
传入参数(控制台)
Processing by UsersController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"1hHzXu2RZR3G3Zx4PoOeDu3DlU31V5abDH/UmNx+w9hs/gacgRYhFgpe6cm0d7cLaTtZdfROi3oUrw/m5EcTAQ==", "user"=>{"firstname"=>"Milhouse", "lastname"=>"Vanhoutten", "email"=>"milhouse@thesimpsons.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Register"}
Unpermitted parameters: firstname, lastname,
(0.4ms) begin transaction
SQL (0.6ms) INSERT INTO "users" ("email", "password_digest", "created_at", "updated_at") VALUES (?, ?, ?, ?) [["email", "milhouse@thesimpsons.com"], ["password_digest", "$2a$10$T.iv9b3BjG.t1FJvT7YsVOZf0wNOD2QSFA9lP8RGOiE1h5AaDdB2q"], ["created_at", "2016-01-18 22:12:32.764948"], ["updated_at", "2016-01-18 22:12:32.764948"]]
(7.0ms) commit transaction
Redirected to /users/6
Completed 302 Found in 122ms (ActiveRecord: 8.7ms)
【问题讨论】:
-
你能显示你的用户架构(来自 schema.rb 文件)吗?
-
显示提交的参数哈希
-
@SteveTurczyn 请参阅上面添加的架构。
-
@Brittany 你能在
@user = User.new(user_params)之前加入一个调试器并打印出params是什么吗?该模型也很有帮助,因为问题可能就在那里。 -
@JesseWhitham 添加了 user.rb;见上文。
标签: ruby-on-rails ruby-on-rails-4