2012-05-30 4 views
-1

Il y a une affectation masse définie dans le modèle sys_log dans nos rails 3.1.4 app:Pourquoi le code d'affectation de masse ne fonctionne pas

attr_accessible :log_date, :user_name, :user_id, :user_ip, :action_logged, :as => :new_log 

Une méthode est définie dans application_controller pour enregistrer le journal:

def sys_logger(action_logged) 
    log = SysLog.new(:log_date => Time.now, :user_id => session[:user_id], :user_name => session[:user_name], :user_ip => session[:user_ip], 
        :action_logged => action_logged, :as => :new_log) 
    log.save 
    end 

Cependant, l'attribution de masse ne fonctionne pas. Voici le message d'avertissement:

WARNING: Can't mass-assign protected attributes: log_date, user_id, user_name, 
user_ip, action_logged, as 

: new_log ne fonctionne pas comme défini. Quel est le problème avec le code ci-dessus? Merci beaucoup.

+0

Je vais deviner en levant ce message d'avertissement donnerait des résultats utiles ... –

Répondre

1

Le :as => :new_log fait maintenant partie du hachage des attributs, au lieu d'une option séparée vous passez

L'ajout de quelques accolades devrait aider.

def sys_logger(action_logged) 
    log = SysLog.new({:log_date => Time.now, :user_id => session[:user_id], 
        :user_name => session[:user_name], :user_ip => session[:user_ip], 
        :action_logged => action_logged }, :as => :new_log) 
    log.save 
end 

Ou assigner temporairement:

def sys_logger(action_logged) 
    attrs = { :log_date => Time.now, :user_id => session[:user_id], 
      :user_name => session[:user_name], :user_ip => session[:user_ip], 
      :action_logged => action_logged } 
    log = SysLog.new(attrs, :as => :new_log) 
    log.save 
end 
+0

Fonctionne comme le charme. Merci. Ce que nous avons manqué est le hachis de rubis devrait être avec des accolades. Ou en tant que var comme les params [: model_name] utilisés dans l'assignation de masse des contrôleurs. Merci encore. – user938363

Questions connexes