Ho un'app Rails con un modello utente che contiene un attributo admin
. È bloccato usando attr_accessible
. Il mio modello è simile al seguente:Rails 3.2, Assegnazione di massa, Ruoli dinamici?
attr_accessible :name, :email, :other_email, :plant_id, :password, :password_confirmation
attr_accessible :name, :email, :other_email, :plant_id, :password, :password_confirmation, :admin, :as => :admin
Ed ecco ciò che il mio metodo di aggiornamento nel mio controller utenti assomiglia:
def update
@user = User.find(params[:id])
if @user.update_attributes(params[:user], :as => current_user_role.to_sym)
flash[:notice] = "Profile updated"
redirect_to edit_user_url(@user)
else
render 'edit'
end
end
Ho un metodo di supporto nel mio controller applicazione che passa di nuovo il ruolo come una stringa :
def current_user_role
@current_user_role ||= current_user.admin? ? "admin" : "default"
end
helper_method :current_user_role
ho anche impostato config.active_record.whitelist_attributes = true
in config/application.rb
.
Ho verificato che il metodo current_user_role
restituisce il valore corretto in base allo stato di amministratore dell'utente corrente. Rails non sta generando un errore di assegnazione di massa. Ma quando provo ad aggiornare lo stato di amministratore di un utente mentre sono loggato come amministratore, Rails esegue l'aggiornamento e ignora silenziosamente l'attributo admin
. Tirando su il record dell'utente nella console di Rails si mostra che il record non è stato modificato.
Ho la sensazione che ci sia un problema specifico di Ruby o di Rails in gioco di cui non sono a conoscenza. Non riesco a trovare nessuna informazione su come rendere dinamico il ruolo. Il meglio che ho trovato è stato this.
Se sto capendo correttamente, hai risposto alla tua stessa domanda. In tal caso, è necessario pubblicare la risposta come risposta (non una modifica alla domanda) e accettarla. –