1

私の構成:

工夫

DeviseViewsが拡張されました

別の登録コントローラーを使用する(ファイルをビュー/デバイス/登録からビュー/登録に移動)

新しい登録フォームに、フォームの送信後に入力されるはずの非表示フィールドがありますが、値がデータベースに保存されていません。

これが私が持っているものです:

ルート.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 
.....

フォームの内容はDBに保存されますが、company_idには保存されません。company_idが実際に作成されており、実際にユーザーパラメーターの一部として渡されていることを確認しました。company_idを計算する前に、DBへの保存はどこかで発生しましたか?同様のトピックに関するStackOverflowQ/ 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 
  .....
4

1 に答える 1

0

この行を変更します。params[:user][:company_id] = company_id.downcase

これに:@user.company_id = company_id.downcase

以前のハッシュ値を使用してオブジェクトを既に作成しているため、params を変更しても何も起こりません。

于 2012-05-24T15:13:06.853 に答える