Ruby on rails ActiveRecord::语句在RegistrationController#create中无效
我一直被这个异常所困扰,我使用的是rails 4.2.5.1和ruby 2.3.0。我正在使用rails中的Desive创建一个模型。我已经重写了designe-create方法。我在postgres中遇到错误,因为PG::NotNullViolation:错误:“id”列中的null值违反了not null约束。我希望在传递参数的帮助下创建id。未创建ID。由于我是rails的新手,我现在已经困了好几个小时了 请求 参数:Ruby on rails ActiveRecord::语句在RegistrationController#create中无效,ruby-on-rails,ruby,postgresql,activerecord,devise,Ruby On Rails,Ruby,Postgresql,Activerecord,Devise,我一直被这个异常所困扰,我使用的是rails 4.2.5.1和ruby 2.3.0。我正在使用rails中的Desive创建一个模型。我已经重写了designe-create方法。我在postgres中遇到错误,因为PG::NotNullViolation:错误:“id”列中的null值违反了not null约束。我希望在传递参数的帮助下创建id。未创建ID。由于我是rails的新手,我现在已经困了好几个小时了 请求 参数: {"utf8"=>"✓", "authenticity_tok
{"utf8"=>"✓",
"authenticity_token"=>"SAiVJEULEa7RsieW+OTW1a/946f2xVbhA/sZWWn3KdX1Wt0Ozx+tq6eQfhTpaAJ+4Cxu2DMnPfqd0Vcle7ow0w==",
"employee"=>{"email"=>"safi123@gmail.com",
"first_name"=>"sss",
"last_name"=>"dddnjnfj",
"phone_number"=>"9944253677",
"alternative_phone_number"=>"9659392682",
"alternative_email_id"=>"dd@gmail.com",
"date_of_joining"=>"12-02-2015",
"date_of_birth"=>"03-02-1999",
"status"=>"Active",
"gender"=>"M",
"blood_group"=>"A +"},
"commit"=>"Sign up"}
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
before_action :authenticate_employee!
before_filter :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) do |employee_params|
employee_params.permit :first_name, :last_name, :blood_group, :phone_number, :gender, :date_of_birth, :email, :alternative_email_id, :status, :date_of_joining, :alternative_phone_number
end
devise_parameter_sanitizer.for(:account_update) do |employee_params|
employee_params.permit :first_name, :last_name, :blood_group, :phone_number, :gender, :date_of_birth, :email, :alternative_email_id, :status, :date_of_joining, :alternative_phone_number
end
end
end
应用程序控制器:
{"utf8"=>"✓",
"authenticity_token"=>"SAiVJEULEa7RsieW+OTW1a/946f2xVbhA/sZWWn3KdX1Wt0Ozx+tq6eQfhTpaAJ+4Cxu2DMnPfqd0Vcle7ow0w==",
"employee"=>{"email"=>"safi123@gmail.com",
"first_name"=>"sss",
"last_name"=>"dddnjnfj",
"phone_number"=>"9944253677",
"alternative_phone_number"=>"9659392682",
"alternative_email_id"=>"dd@gmail.com",
"date_of_joining"=>"12-02-2015",
"date_of_birth"=>"03-02-1999",
"status"=>"Active",
"gender"=>"M",
"blood_group"=>"A +"},
"commit"=>"Sign up"}
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
before_action :authenticate_employee!
before_filter :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) do |employee_params|
employee_params.permit :first_name, :last_name, :blood_group, :phone_number, :gender, :date_of_birth, :email, :alternative_email_id, :status, :date_of_joining, :alternative_phone_number
end
devise_parameter_sanitizer.for(:account_update) do |employee_params|
employee_params.permit :first_name, :last_name, :blood_group, :phone_number, :gender, :date_of_birth, :email, :alternative_email_id, :status, :date_of_joining, :alternative_phone_number
end
end
end
class ApplicationController
注册控制器
class RegistrationsController < Devise::RegistrationsController
def new
super
end
def index
@employees = Employee.all
end
def create
@employee = Employee.new(employee_params)
if @employee.save
redirect_to :action => :new
else
render 'new'
end
@employee.save
end
# Never trust parameters from the scary internet, only allow the white list through.
def employee_params
params.require(:employee).permit(:first_name, :last_name, :blood_group, :phone_number, :gender, :date_of_birth, :email, :alternative_email_id, :status, :date_of_joining, :alternative_phone_number)
end
def update
super
end
end
类注册控制器:new
其他的
呈现“新”
结束
@雇员储蓄
结束
#永远不要相信来自恐怖网络的参数,只允许白名单通过。
def雇员参数
参数要求(:员工)。许可(:姓名,:姓氏,:血型,:电话号码,:性别,:出生日期,:电子邮件,:备选电子邮件id,:状态,:加入日期,:备选电话号码)
结束
def更新
超级的
结束
结束
数据库架构:
{"utf8"=>"✓",
"authenticity_token"=>"SAiVJEULEa7RsieW+OTW1a/946f2xVbhA/sZWWn3KdX1Wt0Ozx+tq6eQfhTpaAJ+4Cxu2DMnPfqd0Vcle7ow0w==",
"employee"=>{"email"=>"safi123@gmail.com",
"first_name"=>"sss",
"last_name"=>"dddnjnfj",
"phone_number"=>"9944253677",
"alternative_phone_number"=>"9659392682",
"alternative_email_id"=>"dd@gmail.com",
"date_of_joining"=>"12-02-2015",
"date_of_birth"=>"03-02-1999",
"status"=>"Active",
"gender"=>"M",
"blood_group"=>"A +"},
"commit"=>"Sign up"}
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
before_action :authenticate_employee!
before_filter :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) do |employee_params|
employee_params.permit :first_name, :last_name, :blood_group, :phone_number, :gender, :date_of_birth, :email, :alternative_email_id, :status, :date_of_joining, :alternative_phone_number
end
devise_parameter_sanitizer.for(:account_update) do |employee_params|
employee_params.permit :first_name, :last_name, :blood_group, :phone_number, :gender, :date_of_birth, :email, :alternative_email_id, :status, :date_of_joining, :alternative_phone_number
end
end
end
我可以理解该ID没有生成,也没有存储在数据库中。这里有什么问题?谁能解释一下我犯了什么错误吗?
您正在保存两次员工记录。这可能是问题所在,请只保存一次。我已执行操作,请检查
def创建
@employee=employee.new(employee_参数)
如果@employee.save
重定向到:action=>:new
其他的
呈现“新”
结束
/*你又在这里救了我一命*/
结束
Hai,你试过这个吗?是的。。我试过了。。但它正在为#抛出另一个未定义的异常方法'present'。你是说?目前必须通过传递参数来创建presenceID。对吗?在这里,我们手动提供要存储的ID。您说您希望使用参数创建ID,所以我的回答是这样的。如果不是,则将更改。请还原下一票。我想在我传递的参数的帮助下创建ID。