我在设计中有自定义注册,但它没有做我应该做的事。
我正在尝试创建新数据:
def create
build_resource(sign_up_params)
if resource.save
yield resource if block_given?
if resource.active_for_authentication?
set_flash_message :notice, :signed_up if is_flashing_format?
sign_up(resource_name, resource)
respond_with resource, :location => after_sign_up_path_for(resource)
if params[:user][:role] == "Proof"
Proof.create(:user_id => current_user.id, :first_name => params[:user][:first_name], :last_name => params[:user][:last_name])
end
else
set_flash_message :notice, :"signed_up_but_#{resource.inactive_message}" if is_flashing_format?
expire_data_after_sign_in!
respond_with resource, :location => after_inactive_sign_up_path_for(resource)
end
else
clean_up_passwords resource
respond_with resource
end
end
这部分的习惯是什么:
if params[:user][:role] == "Proof"
Proof.create(:user_id => current_user.id, :first_name => params[:user][:first_name], :last_name => params[:user][:last_name])
end
但由于某种原因,它没有做到它应该做的事情。注册后,它不会在我的数据库中创建新数据。这是错误的位置吗?
Parameters: {"utf8"=>"✓",
"authenticity_token"=>"3QTVW3x3cnWho5yd6aEMC31iDIDu+IHQClpQao9VBqc=",
"user"=>{"first_name"=>"First",
"last_name"=>"Last",
"role"=>"Proof"}}
答案 0 :(得分:2)
在create
操作中,交换
respond_with resource, :location => after_sign_up_path_for(resource)
if params[:user][:role] == "Proof"
Proof.create(:user_id => current_user.id, :first_name => params[:user][:first_name], :last_name => params[:user][:last_name])
end
要
if params[:user][:role] == "Proof"
Proof.create(:user_id => current_user.id, :first_name => params[:user][:first_name], :last_name => params[:user][:last_name])
end
respond_with resource, :location => after_sign_up_path_for(resource)
目前,由于Proof
语句中的代码是死代码而且从未执行过,因此未创建if
记录。当您调用create
方法时,方法respond_with
会返回。
在调用if
之前执行respond_with
语句可以解决您的问题。
<强>更新强>
根据与OP的聊天会话,由于Proof
字段的验证,未创建custom_url
记录。建议使用on: :update
选项更改验证。
validates :custom_url, uniqueness: true, on: :update