-1

Rails 3.1.4 アプリの sys_log モデルで定義された大量の割り当てがあります。

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

ログを保存するメソッドが application_controller で定義されています。

  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

ただし、一括割り当ては機能しません。警告メッセージは次のとおりです。

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

:new_log が定義どおりに機能していません。上記のコードの何が問題になっていますか? 本当にありがとう。

4

1 に答える 1

1

:as => :new_log、渡す個別のオプションではなく、属性のハッシュの一部になりました。

いくつかの中括弧を追加すると役立つはずです。

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

または一時的に割り当てる:

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
于 2012-05-30T06:05:37.097 に答える