/ / Rails & Devise: промяна на поле преди запазване на формата в DB - ruby-on-rails, база данни, devise, регистрация на потребителя

Rails & Devise: промяна на поле преди запазване на формата в DB - ruby-on-rails, база данни, devise, регистрация на потребителя

Моята конфигурация:

измисляй

Разработете изгледи, разширени

Използване на отделен контролер за регистрации (преместете файловете от изгледи / създаване / регистрации в изгледи / регистрации)

Имам скрито поле в новата форма за регистрация, което трябва да бъде попълнено след подаване на формуляра, но стойността не се записва в базата данни.

Ето какво имам:

В route.rb:

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

В изгледи / региони / нови, имам company_id, дефиниран като скрито поле

В модели / 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 всъщност се създава и всъщност се предава като част от потребителски парами. Записването в DB ли се случи някъде преди да изчисля company_id? Видях куп StackOverflow Q / A по подобни теми, но нищо не работеше или пасваше на това, което се опитвам да правя. Новак тук, така че може би не съм запознат с всички неща, които да търся, тъй като си представям, че това нещо правят хората редовно.

UPDATE:

За да сте сигурни, че 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
.....

Отговори:

0 за отговор № 1

Промяна на този ред: params[:user][:company_id] = company_id.downcase

До това: @user.company_id = company_id.downcase

Промяната на парамите не прави нищо, тъй като вече сте създали обекта, използвайки предишните хеш стойности.