我的配置:
设计
设计视图展开
使用单独的注册控制器(将文件从视图/设计/注册移动到视图/注册)
我在新的注册表单中有一个隐藏字段,应该在提交表单后填写,但该值没有保存到数据库中。
这是我所拥有的:
在 routes.rb 中:
devise_for :users, :controllers => { :registrations => 'registrations' }, :path => '', :path_names => { :sign_in => "login", :sign_up => "request_invite" }
在视图/注册/新建中,我将 company_id 定义为隐藏字段
在models/user.rb中,我有:
attr_accessible: company_id
在registrations_controller.rb 中,我有:
class RegistrationsController < Devise::RegistrationsController
........
def create
@user = User.new(params[:user])
company_id = params[:user][:company] + "_" + params[:user][:ssid]
params[:user][:company_id] = company_id.downcase
respond_to do |format|
if @user.save
flash[:notice] = "New user added"
format.html { redirect_to root_url }
format.json { render json: @user, status: :created, location: @user }
else
format.html { render action: "new" }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
.....
表单的内容被保存到数据库中,但不是 company_id。我验证了 company_id 实际上是在创建的,并且实际上是作为用户参数的一部分传递的。在我计算 company_id 之前是否已保存到数据库?我看到一堆关于类似主题的 StackOverflow Q/A,但没有任何工作或适合我想要做的事情。新手在这里,所以也许我不熟悉所有要寻找的东西,因为我想这是人们经常做的事情。
更新:
为确保 Q/A 完整,以下是正确的代码:
class RegistrationsController < Devise::RegistrationsController
........
def create
@user = User.new(params[:user])
company_id = params[:user][:company] + "_" + params[:user][:ssid]
@user.company_id = company_id.downcase
respond_to do |format|
if @user.save
flash[:notice] = "New user added"
format.html { redirect_to root_url }
format.json { render json: @user, status: :created, location: @user }
else
format.html { render action: "new" }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
.....