/ / Rails & Devise: modifier un champ avant d'enregistrer le formulaire dans la base de données - ruby-on-rails, base de données, conception, enregistrement des utilisateurs

Rails & Devise: modifier un champ avant d'enregistrer le formulaire dans la base de données - ruby-on-rails, base de données, devise, enregistrement d'utilisateur

Ma configuration:

Concevoir

Devise Views élargi

Utilisation d'un contrôleur d'enregistrement distinct (déplacé les fichiers de vues / conception / enregistrements vers vues / enregistrements)

J'ai un champ masqué dans le nouveau formulaire d'inscription qui est censé être rempli après l'envoi du formulaire, mais la valeur n'est pas enregistrée dans la base de données.

Voici ce que j'ai:

Dans routes.rb:

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

Dans views / regiistrations / new, j'ai company_id défini comme un champ caché

Dans models / user.rb, j'ai:

attr_accessible: company_id

Dans registrations_controller.rb, j'ai:

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
.....

Le contenu du formulaire est enregistré dans la base de données, maispas company_id. J'ai vérifié que company_id est en cours de création et qu'il est effectivement transmis dans le cadre des paramètres utilisateur. L'enregistrement dans la base de données a-t-il eu lieu quelque part avant que j'aie calculé company_id? J'ai vu un tas de questions / réponses sur StackOverflow sur des sujets similaires, mais rien n'a fonctionné ni ne correspond à ce que j'essaie de faire. Débutant ici, alors peut-être que je ne suis pas familier avec toutes les choses à rechercher, car j'imagine que c'est quelque chose que les gens font régulièrement.

METTRE À JOUR:

Pour vous assurer que la Q / A est complète, voici le code correct:

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
.....

Réponses:

0 pour la réponse № 1

Changer cette ligne: params[:user][:company_id] = company_id.downcase

Pour ça: @user.company_id = company_id.downcase

La modification des paramètres ne fait rien, car vous avez déjà créé l'objet en utilisant les valeurs de hachage précédentes.