Rails&设计:在将表单保存到数据库之前修改字段

时间:2012-05-24 15:06:38

标签: ruby-on-rails database devise user-registration

我的配置:

设计

设计视图扩展

使用单独的注册控制器(将视图/设计/注册中的文件移动到视图/注册)

我在新的注册表单中有一个隐藏字段,应该在提交表单后填充,但该值不会保存到数据库中。

这就是我所拥有的:

在routes.rb中:

devise_for :users, :controllers => { :registrations => 'registrations' }, :path => '', :path_names => { :sign_in => "login", :sign_up => "request_invite" }

在views / regiistrations / new中,我将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 
.....

表单的内容保存到DB,但不保存在company_id中。我确认company_id实际上正在创建,并且实际上是作为用户参数的一部分传递的。在我计算company_id之前,保存到DB是否发生在某处?我在类似主题上看到了一堆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 
  .....

1 个答案:

答案 0 :(得分:0)

更改此行:params[:user][:company_id] = company_id.downcase

对此:@user.company_id = company_id.downcase

更改params无效,因为您已使用之前的哈希值创建了对象。