【发布时间】:2014-05-27 13:38:04
【问题描述】:
我正在为网站创建注册逻辑,并使用 form_for 从注册页面获取所有数据。我知道数据正在输入,因为我能够对控制器中的输入进行基本的数据过滤。即将到来的数据如下 ruby 所示。
{"utf8"=>"✓",
"authenticity_token"=>"NOT SHOWN",
"email"=>"asdf@",
"password"=>"[FILTERED]",
"confirmed_password"=>"[FILTERED]",
"account_type"=>"selection1",
"submit"=>"Sign Up"}
一旦数据进入,我会在控制器中进行基本数据检查,如下所示。
if params[:email].present? && params[:password].present? &&
params[:confirmed_password].present?
#check matching passwords and valid email syntax
if params[:email].include?('@') && params[:password] == params[:confirmed_password] && (params[:account_type] == 'tenant' || params[:account_type] == 'pm')
#passwords match so account can be created
@newuser = User.new
@newuser.user_username = params[:email]
@newuser.user_hash = params[:email]
@newuser.user_last_update = Time.now
@newuser.save <PROBLEM HAPPENS HERE>
@newemail = Email.new
@newemail.email_address = params[:email]
@newemail.email_parent_id = @newuser.user_id
else
#passwords do not match
flash[:notice] = "PASSWORDS DO NOT MATCH"
end
else
#if any of the fields are empty
flash[:notice] = "FORM MISSING INPUT"
end
问题在于,一旦它到达保存新用户的行,它就会抛出这个错误。
Mysql2::Error: Column 'user_hash' cannot be null: INSERT INTO `users`
(`user_dateofbirth`, `user_firstname`, `user_hash`, `user_id`, `user_last_update`,
`user_lastname`, `user_middlename`, `user_name`) VALUES (NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL)
我已设置其中四列不能为空。 user_hash、user_id、user_username 和 user_last_updated。我感到困惑的是,我在控制器中设置了所有不能为空的值,但是当我保存它们时,它实际上并没有设置这些值。它们都保持为空,它只是告诉我它们不能为空。
那么,我是不是在表格中正确地创建了一个新行或类似的东西。我对 Ruby on Rails 还很陌生,所以我很难过。
差点忘了,这也是用户的模型。我不确定是否需要在此处定义更多内容才能让一切正常工作。
class User < ActiveRecord::Base
# attr_accessible :title, :body
attr_accessor :user_id, :user_username, :user_last_update, :user_hash
end
-
-
更新:
这是设置 user_params 然后将值添加到 newuser 的调用。
@newuser = User.new(user_params)
@newuser.user_username = params[:email]
@newuser.user_hash = params[:email]
@newuser.user_last_update = Time.now
@newuser.save
这是 user_params 方法的代码
def user_params
params.require(:newuser).permit(:user_username, :user_hash, :user_last_update)
end
引发的确切错误如下
TypeError in LoginController#signup
can't convert Symbol into String
Rails.root: /home/rezze-dev/Desktop/Rezze
Application Trace | Framework Trace | Full Trace
app/controllers/login_controller.rb:57:in `user_params'
app/controllers/login_controller.rb:27:in `signup'
This error occurred while loading the following files:
newuser
第 57 行是 user_params 中的 params.require 行
【问题讨论】:
-
如果你在 User 模型中注释掉
attr_accessor怎么办?如果您在此模型后面有一个数据库表,则不需要这样做。
标签: ruby-on-rails database activerecord