collectiveidea / audited Goto Github PK
View Code? Open in Web Editor NEWAudited (formerly acts_as_audited) is an ORM extension that logs all changes to your Rails models.
License: MIT License
Audited (formerly acts_as_audited) is an ORM extension that logs all changes to your Rails models.
License: MIT License
When I try to audit my Users model I get a stack level too deep (see below).
My application_controller looks like this:
class ApplicationController < ActionController::Base
protect_from_forgery # See ActionController::RequestForgeryProtection for details
helper :layout
audit Agent, AgentSite, AlertOption, Bot, Channel, Client, Listing, Note, Recipient, Site, Type
filter_parameter_logging :password, :password_confirmation
helper_method :current_user_session, :current_user
def load_flash
render :partial => "layouts/flash"
end
protected
def current_user
return @current_user if defined?(@current_user)
@current_user = current_user_session && current_user_session.user
end
def store_location
session[:return_to] = request.request_uri
end
private
def current_user_session
return @current_user_session if defined?(@current_user_session)
@current_user_session = UserSession.find
end
end
stack level too deep
RAILS_ROOT: /Users/jlippiner/Projects/repuguard
Application Trace | Framework Trace | Full Trace
/Users/jlippiner/.rvm/gems/ruby-1.9.1-p378+rg/gems/activerecord-2.3.5/lib/active_record/connection_adapters/abstract/connection_pool.rb:351:in retrieve_connection_pool' /Users/jlippiner/.rvm/gems/ruby-1.9.1-p378+rg/gems/activerecord-2.3.5/lib/active_record/connection_adapters/abstract/connection_pool.rb:325:in
retrieve_connection'
/Users/jlippiner/.rvm/gems/ruby-1.9.1-p378+rg/gems/activerecord-2.3.5/lib/active_record/connection_adapters/abstract/connection_specification.rb:123:in retrieve_connection' /Users/jlippiner/.rvm/gems/ruby-1.9.1-p378+rg/gems/activerecord-2.3.5/lib/active_record/connection_adapters/abstract/connection_specification.rb:115:in
connection'
/Users/jlippiner/.rvm/gems/ruby-1.9.1-p378+rg/gems/activerecord-2.3.5/lib/active_record/base.rb:3113:in quoted_table_name' /Users/jlippiner/.rvm/gems/ruby-1.9.1-p378+rg/gems/activerecord-2.3.5/lib/active_record/base.rb:1684:in
construct_finder_sql'
/Users/jlippiner/.rvm/gems/ruby-1.9.1-p378+rg/gems/activerecord-2.3.5/lib/active_record/base.rb:1548:in find_every' /Users/jlippiner/.rvm/gems/ruby-1.9.1-p378+rg/gems/activerecord-2.3.5/lib/active_record/base.rb:1505:in
find_initial'
/Users/jlippiner/.rvm/gems/ruby-1.9.1-p378+rg/gems/activerecord-2.3.5/lib/active_record/base.rb:613:in find' /Users/jlippiner/.rvm/gems/ruby-1.9.1-p378+rg/gems/activerecord-2.3.5/lib/active_record/base.rb:1900:in
find_by_id'
/Users/jlippiner/Projects/repuguard/vendor/gems/authlogic-2.1.2/lib/authlogic/session/scopes.rb:95:in block in search_for_record' /Users/jlippiner/.rvm/gems/ruby-1.9.1-p378+rg/gems/activerecord-2.3.5/lib/active_record/base.rb:2143:in
with_scope'
/Users/jlippiner/Projects/repuguard/vendor/gems/authlogic-2.1.2/lib/authlogic/session/scopes.rb:94:in search_for_record' /Users/jlippiner/Projects/repuguard/vendor/gems/authlogic-2.1.2/lib/authlogic/session/cookies.rb:108:in
persist_by_cookie'
/Users/jlippiner/.rvm/gems/ruby-1.9.1-p378+rg/gems/activesupport-2.3.5/lib/active_support/callbacks.rb:178:in evaluate_method' /Users/jlippiner/.rvm/gems/ruby-1.9.1-p378+rg/gems/activesupport-2.3.5/lib/active_support/callbacks.rb:166:in
call'
/Users/jlippiner/.rvm/gems/ruby-1.9.1-p378+rg/gems/activesupport-2.3.5/lib/active_support/callbacks.rb:93:in block in run' /Users/jlippiner/.rvm/gems/ruby-1.9.1-p378+rg/gems/activesupport-2.3.5/lib/active_support/callbacks.rb:92:in
each'
/Users/jlippiner/.rvm/gems/ruby-1.9.1-p378+rg/gems/activesupport-2.3.5/lib/active_support/callbacks.rb:92:in run' /Users/jlippiner/.rvm/gems/ruby-1.9.1-p378+rg/gems/activesupport-2.3.5/lib/active_support/callbacks.rb:276:in
run_callbacks'
/Users/jlippiner/Projects/repuguard/vendor/gems/authlogic-2.1.2/lib/authlogic/session/callbacks.rb:79:in persist' /Users/jlippiner/Projects/repuguard/vendor/gems/authlogic-2.1.2/lib/authlogic/session/persistence.rb:55:in
persisting?'
/Users/jlippiner/Projects/repuguard/vendor/gems/authlogic-2.1.2/lib/authlogic/session/persistence.rb:39:in find' /Users/jlippiner/Projects/repuguard/app/controllers/application_controller.rb:30:in
current_user_session'
/Users/jlippiner/Projects/repuguard/app/controllers/application_controller.rb:19:in current_user' /Users/jlippiner/Projects/repuguard/app/controllers/application_controller.rb:30:in
current_user_session'
/Users/jlippiner/Projects/repuguard/app/controllers/application_controller.rb:19:in current_user' /Users/jlippiner/Projects/repuguard/app/controllers/application_controller.rb:30:in
current_user_session'
/Users/jlippiner/Projects/repuguard/app/controllers/application_controller.rb:19:in current_user' /Users/jlippiner/Projects/repuguard/app/controllers/application_controller.rb:30:in
current_user_session'
/Users/jlippiner/Projects/repuguard/app/controllers/application_controller.rb:19:in current_user' /Users/jlippiner/Projects/repuguard/app/controllers/application_controller.rb:30:in
current_user_session'
/Users/jlippiner/Projects/repuguard/app/controllers/application_controller.rb:19:in current_user' /Users/jlippiner/Projects/repuguard/app/controllers/application_controller.rb:30:in
current_user_session'
/Users/jlippiner/Projects/repuguard/app/controllers/application_controller.rb:19:in `current_user'
Hello,
When adding methods to another class, like the methods you add to models, can you first check whether such methods do exists and throw an exception if they do. I added auditing to a project which had some relationships called versions and it started behaving bad in very weird ways.
I think it's a good metaprogramming practice to always check for the existence of methods before adding them.
Thanks.
Rails 3.0.4 was released to fix a couple of security issues. acts_as_audited declares 3.0.3 as a dependency can this be changed to >=3.0.3 if 3.0.3 minimum is actually required or ~> 3.0 if just rails 3 is required
Hey there!
Thanks for this most excellent plugin!
The bug/issue I seem to have found is: When I start up a rails application, and immediately select a few audits (without creating any new audits), the deserialization of 'changes' returns an empty hash. Here's some sample output from the debugger (reformatted for readability):
(rdb:4) @unsent_changes.size
4
(rdb:4) @unsent_changes[0]
#<AuditE911 id: 25,
auditable_id: 2020,
auditable_type: "MasterRelation",
user_id: 8,
user_type: "User",
username: nil,
action: "create",
changes: {"extension"=>nil,
"phone_id"=>nil,
"employee_id"=>1124,
"location_id"=>2131,
"used_for_411"=>nil},
version: 1,
created_at: "2009-06-11 21:43:40",
sent: false
>
(rdb:4) @unsent_changes[0].changes
{}
(rdb:4) MasterRelation.create!(:employee_id => 1)
#<MasterRelation ...
(rdb:4) @unsent_changes[0].changes
{"extension"=>nil,
"phone_id"=>nil,
"employee_id"=>1124,
"location_id"=>2131,
"used_for_411"=>nil}
It appears everything works well, but getting that initial change select is really eluding me.
Rails 3.1.0...
There are cases where we don't want to audit while testing, running migrations, etc... There needs to be a way to turn auditing off and on.
Hey Kenneth sorry to bother you again with Jruby and stuff.
I am able to deploy by auditing my model using acts_as_audited 2.0.0.rc5
gem on Webrick successfully.
But when I do a war and try to deploy the war file on glassfish, I am
stuck with following errors. I didnt find much about this on google and
even tried all the things I found there
The occured error is like this. Can anyone please help me out
[#|2011-02-09T14:08:02.558-0600|SEVERE|glassfish3.0.1|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=32;_ThreadName=http-thread-pool-8080-(1);|WebModule[/gavel]Application
Error
org.jruby.rack.RackInitializationException: undefined method
cache_sweeper' for ActionController::Base:Class from /home/dev2/.rvm/gems/jruby-1.6.0.RC1@global/bundler/gems/acts_as_audited-ccc7043d113f/lib/acts_as_audited.rb:44:in
class_eval'
from
/home/dev2/.rvm/gems/jruby-1.6.0.RC1@global/bundler/gems/acts_as_audited-ccc7043d113f/lib/acts_as_audited.rb:44
from
/home/dev2/.rvm/gems/jruby-1.6.0.RC1@global/bundler/gems/acts_as_audited-ccc7043d113f/lib/acts_as_audited.rb:68:in
require' from /home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/bundler-1.0.10/lib/bundler/runtime.rb:68:in
require'
from
/home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/bundler-1.0.10/lib/bundler/runtime.rb:66:in
each' from /home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/bundler-1.0.10/lib/bundler/runtime.rb:66:in
require'
from
/home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/bundler-1.0.10/lib/bundler/runtime.rb:55:in
each' from /home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/bundler-1.0.10/lib/bundler/runtime.rb:55:in
require'
... 20 levels...
from classpath:/vendor/rack-1.2.1/rack/builder.rb:46:in initialize' from <web.xml>:1:in
new'
from <web.xml>:1
at
org.jruby.rack.DefaultRackApplicationFactory$4.init(DefaultRackApplicationFactory.java:198)
at
org.jruby.rack.DefaultRackApplicationFactory.getApplication(DefaultRackApplicationFactory.java:61)
at
org.jruby.rack.PoolingRackApplicationFactory.getApplication(PoolingRackApplicationFactory.java:94)
at
org.jruby.rack.DefaultRackDispatcher.process(DefaultRackDispatcher.java:28)
at org.jruby.rack.RackFilter.doFilter(RackFilter.java:63)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:277)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
at
com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
at
org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226)
at
com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:239)
at
com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
at
com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
at
com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
at
com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
at
com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
at
com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
at
com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
at
com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
at
com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
at
com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
at
com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
at java.lang.Thread.run(Thread.java:662)
Caused by: org.jruby.exceptions.RaiseException: undefined method
`cache_sweeper' for ActionController::Base:Class
at
Kernel.cache_sweeper(/home/dev2/.rvm/gems/jruby-1.6.0.RC1@global/bundler/gems/acts_as_audited-ccc7043d113f/lib/acts_as_audited.rb:45)
at
(unknown).(unknown)(/home/dev2/.rvm/gems/jruby-1.6.0.RC1@global/bundler/gems/acts_as_audited-ccc7043d113f/lib/acts_as_audited.rb:44)
at
Module.class_eval(/home/dev2/.rvm/gems/jruby-1.6.0.RC1@global/bundler/gems/acts_as_audited-ccc7043d113f/lib/acts_as_audited.rb:44)
at
Module.class_eval(/home/dev2/.rvm/gems/jruby-1.6.0.RC1@global/bundler/gems/acts_as_audited-ccc7043d113f/lib/acts_as_audited.rb:44)
at
(unknown).(unknown)(/home/dev2/.rvm/gems/jruby-1.6.0.RC1@global/bundler/gems/acts_as_audited-ccc7043d113f/lib/acts_as_audited.rb:68)
at
at
Bundler::Runtime.require(/home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/bundler-1.0.10/lib/bundler/runtime.rb:66)
at
Array.each(/home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/bundler-1.0.10/lib/bundler/runtime.rb:66)
at
Bundler::Runtime.require(/home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/bundler-1.0.10/lib/bundler/runtime.rb:55)
at
Array.each(/home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/bundler-1.0.10/lib/bundler/runtime.rb:55)
at
Bundler::Runtime.require(/home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/bundler-1.0.10/lib/bundler.rb:120)
at
at
(unknown).(unknown)(/home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/config/application.rb:239)
at
Kernel.require(/home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/activesupport-3.0.3/lib/active_support/dependencies.rb:239)
at
ActiveSupport::Dependencies::Loadable.require(/home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/activesupport-3.0.3/lib/active_support/dependencies.rb:225)
at
ActiveSupport::Dependencies::Loadable.load_dependency(/home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/activesupport-3.0.3/lib/active_support/dependencies.rb:596)
at
ActiveSupport::Dependencies.new_constants_in(/home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/activesupport-3.0.3/lib/active_support/dependencies.rb:225)
at
ActiveSupport::Dependencies::Loadable.load_dependency(/home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/activesupport-3.0.3/lib/active_support/dependencies.rb:239)
at
ActiveSupport::Dependencies::Loadable.require(/home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/config/environment.rb:2)
at
(unknown).(unknown)(/home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/config/environment.rb:239)
at
Kernel.require(/home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/activesupport-3.0.3/lib/active_support/dependencies.rb:239)
at
ActiveSupport::Dependencies::Loadable.require(/home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/activesupport-3.0.3/lib/active_support/dependencies.rb:225)
at
ActiveSupport::Dependencies::Loadable.load_dependency(/home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/activesupport-3.0.3/lib/active_support/dependencies.rb:596)
at
ActiveSupport::Dependencies.new_constants_in(/home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/activesupport-3.0.3/lib/active_support/dependencies.rb:225)
at
ActiveSupport::Dependencies::Loadable.load_dependency(/home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/activesupport-3.0.3/lib/active_support/depende[#|2011-02-09T14:08:02.558-0600|SEVERE|glassfish3.0.1|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=32;_ThreadName=Thread-1;|WebModule[/gavel]Application
Error
org.jruby.rack.RackInitializationException: undefined method
cache_sweeper' for ActionController::Base:Class from /home/dev2/.rvm/gems/jruby-1.6.0.RC1@global/bundler/gems/acts_as_audited-ccc7043d113f/lib/acts_as_audited.rb:44:in
class_eval'
from
/home/dev2/.rvm/gems/jruby-1.6.0.RC1@global/bundler/gems/acts_as_audited-ccc7043d113f/lib/acts_as_audited.rb:44
from
/home/dev2/.rvm/gems/jruby-1.6.0.RC1@global/bundler/gems/acts_as_audited-ccc7043d113f/lib/acts_as_audited.rb:68:in
require' from /home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/bundler-1.0.10/lib/bundler/runtime.rb:68:in
require'
from
/home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/bundler-1.0.10/lib/bundler/runtime.rb:66:in
each' from /home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/bundler-1.0.10/lib/bundler/runtime.rb:66:in
require'
from
/home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/bundler-1.0.10/lib/bundler/runtime.rb:55:in
each' from /home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/bundler-1.0.10/lib/bundler/runtime.rb:55:in
require'
... 20 levels...
from classpath:/vendor/rack-1.2.1/rack/builder.rb:46:in initialize' from <web.xml>:1:in
new'
from <web.xml>:1
at
org.jruby.rack.DefaultRackApplicationFactory$4.init(DefaultRackApplicationFactory.java:198)
at
org.jruby.rack.DefaultRackApplicationFactory.getApplication(DefaultRackApplicationFactory.java:61)
at
org.jruby.rack.PoolingRackApplicationFactory.getApplication(PoolingRackApplicationFactory.java:94)
at
org.jruby.rack.DefaultRackDispatcher.process(DefaultRackDispatcher.java:28)
at org.jruby.rack.RackFilter.doFilter(RackFilter.java:63)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:277)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
at
com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
at
org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226)
at
com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:239)
at
com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
at
com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
at
com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
at
com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
at
com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
at
com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
at
com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
at
com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
at
com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
at
com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
at
com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
at java.lang.Thread.run(Thread.java:662)
Caused by: org.jruby.exceptions.RaiseException: undefined method
`cache_sweeper' for ActionController::Base:Class
at
Kernel.cache_sweeper(/home/dev2/.rvm/gems/jruby-1.6.0.RC1@global/bundler/gems/acts_as_audited-ccc7043d113f/lib/acts_as_audited.rb:45)
at
(unknown).(unknown)(/home/dev2/.rvm/gems/jruby-1.6.0.RC1@global/bundler/gems/acts_as_audited-ccc7043d113f/lib/acts_as_audited.rb:44)
at
Module.class_eval(/home/dev2/.rvm/gems/jruby-1.6.0.RC1@global/bundler/gems/acts_as_audited-ccc7043d113f/lib/acts_as_audited.rb:44)
at
Module.class_eval(/home/dev2/.rvm/gems/jruby-1.6.0.RC1@global/bundler/gems/acts_as_audited-ccc7043d113f/lib/acts_as_audited.rb:44)
at
(unknown).(unknown)(/home/dev2/.rvm/gems/jruby-1.6.0.RC1@global/bundler/gems/acts_as_audited-ccc7043d113f/lib/acts_as_audited.rb:68)
at
at
Bundler::Runtime.require(/home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/bundler-1.0.10/lib/bundler/runtime.rb:66)
at
Array.each(/home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/bundler-1.0.10/lib/bundler/runtime.rb:66)
at
Bundler::Runtime.require(/home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/bundler-1.0.10/lib/bundler/runtime.rb:55)
at
Array.each(/home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/bundler-1.0.10/lib/bundler/runtime.rb:55)
at
Bundler::Runtime.require(/home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/bundler-1.0.10/lib/bundler.rb:120)
at
at
(unknown).(unknown)(/home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/config/application.rb:239)
at
Kernel.require(/home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/activesupport-3.0.3/lib/active_support/dependencies.rb:239)
at
ActiveSupport::Dependencies::Loadable.require(/home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/activesupport-3.0.3/lib/active_support/dependencies.rb:225)
at
ActiveSupport::Dependencies::Loadable.load_dependency(/home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/activesupport-3.0.3/lib/active_support/dependencies.rb:596)
at
ActiveSupport::Dependencies.new_constants_in(/home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/activesupport-3.0.3/lib/active_support/dependencies.rb:225)
at
ActiveSupport::Dependencies::Loadable.load_dependency(/home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/activesupport-3.0.3/lib/active_support/dependencies.rb:239)
at
ActiveSupport::Dependencies::Loadable.require(/home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/config/environment.rb:2)
at
(unknown).(unknown)(/home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/config/environment.rb:239)
at
Kernel.require(/home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/activesupport-3.0.3/lib/active_support/dependencies.rb:239)
at
ActiveSupport::Dependencies::Loadable.require(/home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/activesupport-3.0.3/lib/active_support/dependencies.rb:225)
at
ActiveSupport::Dependencies::Loadable.load_dependency(/home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/activesupport-3.0.3/lib/active_support/dependencies.rb:596)
at
ActiveSupport::Dependencies.new_constants_in(/home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/activesupport-3.0.3/lib/active_support/dependencies.rb:225)
at
ActiveSupport::Dependencies::Loadable.load_dependency(/home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/activesupport-3.0.3/lib/active_support/dependencies.rb:239)
at
ActiveSupport::Dependencies::Loadable.require(classpath:/jruby/rack/rails.rb:169)
at
JRuby::Rack::RailsBooter::Rails3Environment.load_environment(classpath:/jruby/rack/rails.rb:173)
at
JRuby::Rack::RailsBooter::Rails3Environment.to_app(classpath:/jruby/rack/rails.rb:194)
at #Class:01x11a2567.new(<web.xml>:1)
at
(unknown).(unknown)(classpath:/vendor/rack-1.2.1/rack/builder.rb:46)
at
Kernel.instance_eval(classpath:/vendor/rack-1.2.1/rack/builder.rb:46)
at
Kernel.instance_eval(classpath:/vendor/rack-1.2.1/rack/builder.rb:46)
at Rack::Builder.initialize(<web.xml>:1)
at (unknown).new(<web.xml>:1)
at (unknown).(unknown)(:1)
|#]
ncies.rb:239)
at
ActiveSupport::Dependencies::Loadable.require(classpath:/jruby/rack/rails.rb:169)
at
JRuby::Rack::RailsBooter::Rails3Environment.load_environment(classpath:/jruby/rack/rails.rb:173)
at
JRuby::Rack::RailsBooter::Rails3Environment.to_app(classpath:/jruby/rack/rails.rb:194)
at #Class:01x11a2567.new(<web.xml>:1)
at
(unknown).(unknown)(classpath:/vendor/rack-1.2.1/rack/builder.rb:46)
at
Kernel.instance_eval(classpath:/vendor/rack-1.2.1/rack/builder.rb:46)
at
Kernel.instance_eval(classpath:/vendor/rack-1.2.1/rack/builder.rb:46)
at Rack::Builder.initialize(<web.xml>:1)
at (unknown).new(<web.xml>:1)
at (unknown).(unknown)(:1)
|#]
Hi,
I've recently updated to v1.1.0, since then my ActiveScaffold setup is broken again.
using git bisect I've found out that commit 12fc5b1 broke it.
the full trace is:
NoMethodError (undefined method controller_name' for nil:NilClass): passenger (2.2.2) lib/phusion_passenger/rack/request_handler.rb:81:in
process_request'
passenger (2.2.2) lib/phusion_passenger/abstract_request_handler.rb:203:in main_loop' passenger (2.2.2) lib/phusion_passenger/railz/application_spawner.rb:340:in
start_request_handler'
passenger (2.2.2) lib/phusion_passenger/railz/application_spawner.rb:298:in handle_spawn_application' passenger (2.2.2) lib/phusion_passenger/utils.rb:181:in
safe_fork'
passenger (2.2.2) lib/phusion_passenger/railz/application_spawner.rb:296:in handle_spawn_application' passenger (2.2.2) lib/phusion_passenger/abstract_server.rb:337:in
send'
passenger (2.2.2) lib/phusion_passenger/abstract_server.rb:337:in main_loop' passenger (2.2.2) lib/phusion_passenger/abstract_server.rb:187:in
start_synchronously'
passenger (2.2.2) lib/phusion_passenger/abstract_server.rb:154:in start' passenger (2.2.2) lib/phusion_passenger/railz/application_spawner.rb:192:in
start'
passenger (2.2.2) lib/phusion_passenger/spawn_manager.rb:257:in spawn_rails_application' passenger (2.2.2) lib/phusion_passenger/abstract_server_collection.rb:126:in
lookup_or_add'
passenger (2.2.2) lib/phusion_passenger/spawn_manager.rb:251:in spawn_rails_application' passenger (2.2.2) lib/phusion_passenger/abstract_server_collection.rb:80:in
synchronize'
passenger (2.2.2) lib/phusion_passenger/abstract_server_collection.rb:79:in synchronize' passenger (2.2.2) lib/phusion_passenger/spawn_manager.rb:250:in
spawn_rails_application'
passenger (2.2.2) lib/phusion_passenger/spawn_manager.rb:153:in spawn_application' passenger (2.2.2) lib/phusion_passenger/spawn_manager.rb:282:in
handle_spawn_application'
passenger (2.2.2) lib/phusion_passenger/abstract_server.rb:337:in __send__' passenger (2.2.2) lib/phusion_passenger/abstract_server.rb:337:in
main_loop'
passenger (2.2.2) lib/phusion_passenger/abstract_server.rb:187:in `start_synchronously'
which makes it very hard to debug :(
Has there been any thought to allowing the User record to be stored both as an AR and a string?
I'd like this approach since if a User record is ever destroyed, and you're only recording by AR object, then you've effectively lost the User history aspect of that audit record.
if i put "acts_as_audit" in a model it try to audit the changes, but the sweeper is not called. So i ever need to "audit Model" in the controller.
Say I have the following process:
Ok, when I have a look at O.audits.changes at the step where I give a value for C, I get:
'null' => 'my_value_for_C'. (value at version 1 => value at version 2 )
That looks alright.
Now, when I use:
O.revisions.each do |revision|
puts "Version #{revision.version}: #{revision.c}"
end
I get something like:
Version 1: 'my_value_for_C'
Version 2: 'my_value_for_C'
Instead of:
Version 1: 'null'
Version 2: 'my_value_for_C'
Should this be an expected behaviour?
I'd like to use this way of fetching revisions because they are actually representations of my object, as opposed to using "O.audits" that give me Audit objects.
Thank you for your help!
2.0.0.rc3 issues
DEPRECATION WARNING: reorder is deprecated. Please use except(:order).order(...) instead
from lib/acts_as_audited/audit.rb:25 when used with Rails 3.0.3
I managed to install acts_as_audited 2.0.0.rc3 on rails3 sample app. Changes to the model are recorded, but the audited_changes column stays empty. Do I have to change something more?
kennethkalmer about 2 hours ago | link @zettworks, no, can you check against 2.0.0.rc4 (now on rubygems) and open a bug with some re-produceable steps that I can follow (if needed) ?
@kennethkalmer: Now I have 2.0.0.rc5 installed.
Still the same problem. Most data fields are filled, but the most interesting 'audited_changes' have just a '---' entry. I would expect that it stores what has been changed?
I'm quite new to Rails, which files or information would be need to describe the problem
appropriately or in 're-producable' way.
I
This happens in an app that uses acts_as_audited and relies on controller.current_user
to provide the user to the Audit
record. Steps to reproduce:
The audit
record has no user.
This is happening because on line 28 of audit_sweeper.rb, the controller
is nil.
The reason controller
is nil is that the before
hook on line 8 in action_controller/caching/sweeper.rb
, which assigns the current controller to the @controller
instance variable, is not called on the first request.
We were able to work around this issue in our app with the following addition to our ApplicationController
.
require 'acts_as_audited/audit' require 'acts_as_audited/audit_sweeper' cache_sweeper :audit_sweeper, :only => [:create, :update, :destroy]
VERSIONS:
rails-2.3.5
acts_as_audited-1.1.1
ree-1.8.7-2010.01
class User < ActiveRecord::Base
include Clearance::User
acts_as_audited # it records everything OK
# except the user_id which is always null
end
Say I have an object and I start to audit it. If I save a change to the object then an audit record is created. I can see that I have one revision of the object, and the audit record knows what the field used to be before the change, but there's no way for me to get a version of the object as it looked before that change.
Viewing subsequent revisions is fine; it's just with the initial one that we have this problem.
I would appreciate any advice that can be offered for this strange (to me, at least) problem. I'm not sure if this is a problem with a_a_a or with something I'm doing. As far as I know, I'm not overriding any YAML methods, and I have these two lines in my config/environments/production.rb:
config.cache_classes = true
config.action_controller.perform_caching = true
I'm using acts_as_audited (1.1.0) in a Rails 2.3.5 app.
I just created a comment (model Comment, polymorphic) and updated it. In the Rails console, I can find the audit record, but I cannot explicity show the changes until I explicity deserialize (using y). Does this make sense? I've pasted an example below. Note the empty hash that results from "a.changes". Also, is it strange that the value to the "created_on" key in the changes hash is not an array, but rather a single DateTime?
-cal
>> a = Audit.find 209881
Audit Load (0.4ms) SELECT * FROM `audits` WHERE (`audits`.`id` = 209881)
=> #<Audit id: 209881, auditable_id: 3592, auditable_type: "Comment", user_id: 1, user_type: "User", username: nil, action: "create", changes: {"created_on"=>Fri Apr 02 14:00:11 -0400 2010, "commentable_type"=>"Collection", "commentable_id"=>1415, "text"=>"<p>test</p>", "updated_on"=>Fri Apr 02 14:00:11 -0400 2010, "created_by"=>1, "updated_by"=>1}, version: 1, created_at: "2010-04-02 14:00:11">
>> a.changes
=> {}
>> y a
--- !ruby/object:Audit
attributes:
created_at: 2010-04-02 14:00:11
action: create
username:
user_type: User
id: "209881"
version: "1"
user_id: "1"
auditable_type: Comment
changes:
created_on: &id001 2010-04-02 14:00:11.256183 -04:00
commentable_type: Collection
commentable_id: 1415
text: <p>test</p>
updated_on: *id001
created_by: 1
updated_by: 1
auditable_id: "3592"
attributes_cache: {}
changed_attributes: {}
=> nil
>> a.changes
=> {"created_on"=>Fri Apr 02 14:00:11 -0400 2010, "commentable_type"=>"Collection", "commentable_id"=>1415, "text"=>"<p>test</p>", "updated_on"=>Fri Apr 02 14:00:11 -0400 2010, "created_by"=>1, "updated_by"=>1}
I've used acts_as_audited with rails 3.0 successfully. Trying to convert the project to rails 3.1 I get "stack level too deep" error any time Audit object is saved.
How to reproduce:
Loading development environment (Rails 3.1.0.rc1)
:001 > Audit.create
(0.1ms) SELECT MAX("audits"."version") AS max_id FROM "audits" WHERE "audits"."auditable_id" IS NULL AND "audits"."auditable_type" IS NULL
SystemStackError: stack level too deep
from /home/ineu/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/irb/workspace.rb:80
Maybe IRB bug!!
I managed to install acts_as_audited 2.0.0.rc3 on rails3 sample app. Changes to the model are recorded, but the audited_changes column stays empty. Do I have to change something more?
kennethkalmer about 2 hours ago | link
@zettworks, no, can you check against 2.0.0.rc4 (now on rubygems) and open a bug with some re-produceable steps that I can follow (if needed) ?
@kennethkalmer: I tried to use rc4, but get the following error message:
Could not find gem 'acts_as_audited (= 2.0.0.rc4, runtime)' in git://github.com/collectiveidea/acts_as_audited.git (at 2.0.0.rc4).
Source contains 'acts_as_audited' at: 2.0.0.rc3
Switched back to rc3 and get the following warning, when I start the server:
U:\Programming\railsprojects\myproject>rails s
DEPRECATION WARNING: reorder is deprecated. Please use except(:order).order(...) instead. (called from C:in `reorder':)
I would like to audit virtual attributes, which are not stored as columns in the same table. Think about a “tag_list” managed by acts_as_taggable_on. This virtual attributes are stored elsewhere, but the changes should be audited in the owner model.
Perhaps this could be configured by an additional option like :add in addition to :except.
If in my users model I have:
acts_as_audited :except => [:firstname, :lastname, :email]
I can rollback and db:migrate no problem. BUT if i have
acts_as_audited :only => [:firstname, :lastname, :email]
I get
Could not find table 'users'
(when building from scratch).
It seems like there is a problem with the :only option.... I guess i should mention that i am also using the devise gem.
Thanks!
a great feature will be to support model relations.
has_versioning(http://github.com/kkurach/has_versioning/tree/master) support it, so can be a start point
Some strange error - ruby1.9.2, rails 3.0.3, pg (utf8)
"can't define singleton method "encode_with" for BigDecimal"
No chance to save a column with numeric record.
Wil be great the possibility set what method to user for current_user
It seems that created_on/updated_on timestamps are not being added to the attribute list when a revision is being reconstructed. As an example, I created an instance of Comment, then edited it. (It's a polymorphic model, but I have no validation of that at the moment, so please ignore the commentable_id and commentable_type attributes.)
Notice how, in the last command -- c.revision_at(1.minute.ago) -- the created_on and updated_on attributes are nil. I was expecting them to be reverted back to the original.
>> c = Comment.create(:text => "new comment")
Audit Create (0.2ms) INSERT INTO `audits` (`created_at`, `username`, `action`, `user_type`, `auditable_type`, `user_id`, `version`, `auditable_id`, `changes`) VALUES('2010-04-02 15:26:33', NULL, 'create', NULL, 'Comment', NULL, 1, 3594, '--- \ncommentable_type: \ncreated_on: &id001 2010-04-02 15:26:32.984962 -04:00\ncommentable_id: \ntext: new comment\ncreated_by: \nupdated_on: *id001\nupdated_by: \n')
=> #<Comment id: 3594, text: "new comment", created_on: "2010-04-02 15:26:32", updated_on: "2010-04-02 15:26:32", created_by: nil, updated_by: nil, commentable_type: nil, commentable_id: nil>
>> c.update_attribute :text, "edited comment"
Audit Create (0.2ms) INSERT INTO `audits` (`created_at`, `username`, `action`, `user_type`, `auditable_type`, `user_id`, `version`, `auditable_id`, `changes`) VALUES('2010-04-02 15:26:59', NULL, 'update', NULL, 'Comment', NULL, 2, 3594, '--- \ntext: \n- new comment\n- edited comment\n')
Comment Update (0.2ms) UPDATE `comments` SET `updated_on` = '2010-04-02 15:26:59', `text` = 'edited comment' WHERE `id` = 3594
=> true
>> c.reload
<SNIP>
>> c
=> #<Comment id: 3594, text: "edited comment", created_on: "2010-04-02 15:26:32", updated_on: "2010-04-02 15:26:59", created_by: nil, updated_by: nil, commentable_type: nil, commentable_id: nil>
>> c.revision_at(1.minute.ago)
Audit Load (1.1ms) SELECT * FROM `audits` WHERE (`audits`.auditable_id = 3594 AND `audits`.auditable_type = 'Comment' AND (created_at <= '2010-04-02 15:26:35')) ORDER BY `audits`.version
=> #<Comment id: 3594, text: "new comment", created_on: nil, updated_on: nil, created_by: nil, updated_by: nil, commentable_type: nil, commentable_id: nil>
I upgraded my application from rails 2 to rails 3.0.3 and when i run the upgrade migrations generated by acts_as_audited gem, i get the following error.
== AddAssociationToAudits: migrating =========================================
-- add_column(:audits, :association_id, :integer, {})
-> 0.0014s
-- add_foreign_key(:audits, :association_id, "associations", :id, {})
rake aborted!
An error has occurred, this and all later migrations canceled:
PGError: ERROR: relation "associations" does not exist
: ALTER TABLE audits ADD FOREIGN KEY (association_id) REFERENCES associations (id) DEFERRABLE
The first 3 migrations ran successfully.
== AddCommentToAudits: migrating =============================================
-- add_column(:audits, :comment, :string, {})
-> 0.0930s
== AddCommentToAudits: migrated (0.0961s) ====================================
== RenameChangesToAuditedChanges: migrating ==================================
-- rename_column(:audits, :changes, :audited_changes)
-> 0.0011s
== RenameChangesToAuditedChanges: migrated (0.0019s) =========================
== AddRemoteAddressToAudits: migrating =======================================
-- add_column(:audits, :remote_address, :string, {})
-> 0.0012s
== AddRemoteAddressToAudits: migrated (0.0017s) ==============================
Thanks
I have audits table on a local (to rails) server and the rest of tables are located on a remote server.
I get "NoMethodError (undefined method `controller_name' for nil:NilClass)" every time I try to save or delete any record. I'm using :only => [...] param, because otherwise I get that error on every request to any resource.
Removing audit from the application controller stops the error message to appear.
It would be useful to store comments with an audit. Such as a note explaining why the change was made.
It's not a big deal, but it could be confusing for people trying to figure things out.
The example in the wiki suggests:
has_many :changes, :class_name => 'Audit', :as => :user
however that conflicts with ActiveRecord::Dirty's changes method that provides the list of changes to an AR object.
Using the current rails3 branch ... I think rails 3.0.3 introduced a bug. It works on rails 3.0.1, but when I update to rails 3.0.3, I get:
activerecord (3.0.3) lib/active_record/associations/association_collection.rb:550:in `ensure_owner_is_not_new' activerecord (3.0.3) lib/active_record/associations/association_collection.rb:494:in `create_record' activerecord (3.0.3) lib/active_record/associations/association_collection.rb:269:in `create' /Users/dgm/.rvm/gems/ruby-1.9.2-p0@cumpp/bundler/gems/acts_as_audited-574ae9e4d49a/lib/acts_as_audited/auditor.rb:204:in `write_audit' /Users/dgm/.rvm/gems/ruby-1.9.2-p0@cumpp/bundler/gems/acts_as_audited-574ae9e4d49a/lib/acts_as_audited/auditor.rb:199:in `audit_destroy'
When looking at the audit table, the created_at values are all:
0000-00-00 00:00:00
Is there something needed to get this working?
I am using Rails 3.0.10 with MySQL
I am really loving this gem and in the process of doing a full integration into a Rails 2.x app.
Unfortunately acts_as_audited does not have any way to track changes in many to many relationships, specifically has-and-belongs-to-many (HABTM).
In these cases the only data representing the relationship is in a join table with no actual model. The only way I can think of to implement acts_as_audited would be to change HABTM to has_many :through, so there is an actual model to track. However even this is not ideal.
If I am missing something please let me know. I'm really loving the implementation but not sure how to proceed withthis.
I know that there is a comment field in the audits table but we are using that for something else.
We need a way to have that the password was changed without showing what it was/is now.
We were thinking of just appending on to the end of the audit_changes some text like "Password Changed".
In my application controller I have something like
audit Model1, Model2, Model3, :only => [:update, :destroy]
However, all three actions are being audited.
Looking at the code it appears that the :only option is treated in two different ways. In the acts_as_audited method, :only is used to modify the attribute list (not the actions). However in the controller/sweepers creation audit method, the :only option (and any others) is passed on to the sweepers. So, I'm not sure which way you intended this to go. It feels a little odd to have :only and :except do two totally different things, so would another option (:action?) be in order? Any other ideas or am I reading this wrong?
Rails 2.3.2
Thanks for your help!
I have an employee model using acts_as_audited. When I first create the employee, the corresponding audit data and the employee revision data are congruent. However, I do not get what I expect when reviewing the audit and revision data when I do something like this:
@employee.email = "[email protected]"
@employee.save
I should expect that my first revision should contain the original piece of data I entered for the employee's email address. Instead I see the very first revision of the employee with the updated email address like so:
@employee.revision(0)
=> Employee id: 1, email: "[email protected]", active: true
When I view my audit data, audit[#].changes displays the correct change for the model.
@Audits[0].changes
=> "--- email: [email protected]"
and
@Audits[1].changes
=> {"email"=>["[email protected]", "[email protected]"]}
So the question arises. Why doesn't @employee.revisions reflect @Audits[#].changes?
I tried to bundle "acts_as_audited", "2.0.0.rc5" with jruby 1.6.0.RC1 but I am unable to do it
I tried to bundle "acts_as_audited", "2.0.0.rc3", :git => "git://github.com/collectiveidea/acts_as_audited.git", :tag => "2.0.0.rc3", it worked well on my development. But when I create a war file and tried to run on a jvm, I am stuck that I can't do bundle install with war file.
Is there any other way that I can use this gem on my jruby application :(
Thank you Kenneth for such a cool and nice gem!!
I declare in my application.rb:
audit User, PaymentAccount, Client, Product, Price, Contract, AssignedAdsl, ContractPrice, Role
But in production, only User, Client, Price and AssignedAdsl are audited. In development, all models are audited.
It's weird, but it's true. Does anybody know what might cause this?
Will be great to know from what IP the change was made.
There is a gemspec in repository, but gem is not being generated by github
When there are two separate controllers that audit a model, there are duplicate audits created when class caching is enabled. For example:
class PostsController < ApplicationController audit Post, :only => :create ... end class AdminController < ApplicationController audit Post ... end
In my application i am obtaining an error 500 (Internal Server Error) and this is produced by this plugin. If I comment the audit in my model, then all runs perfectly. Any suggestions?
activerecord (3.0.0) lib/active_record/base.rb:1016:in `method_missing'
activerecord (3.0.0) lib/active_record/associations/association_collection.rb:443:in `block in method_missing'
activerecord (3.0.0) lib/active_record/base.rb:1128:in `with_scope'
activerecord (3.0.0) lib/active_record/associations/association_proxy.rb:203:in `with_scope'
activerecord (3.0.0) lib/active_record/associations/association_collection.rb:439:in `method_missing'
activerecord (3.0.0) lib/active_record/autosave_association.rb:261:in `association_valid?'
activerecord (3.0.0) lib/active_record/autosave_association.rb:242:in `validate_single_association'
activerecord (3.0.0) lib/active_record/autosave_association.rb:180:in `block in add_autosave_association_callbacks'
activesupport (3.0.0) lib/active_support/callbacks.rb:414:in `_run_validate_callbacks'
activemodel (3.0.0) lib/active_model/validations.rb:212:in `run_validations!'
activemodel (3.0.0) lib/active_model/validations/callbacks.rb:67:in `block in run_validations!'
activesupport (3.0.0) lib/active_support/callbacks.rb:413:in `_run_validation_callbacks'
activemodel (3.0.0) lib/active_model/validations/callbacks.rb:67:in `run_validations!'
activemodel (3.0.0) lib/active_model/validations.rb:179:in `valid?'
activerecord (3.0.0) lib/active_record/validations.rb:55:in `valid?'
activerecord (3.0.0) lib/active_record/validations.rb:75:in `perform_validations'
activerecord (3.0.0) lib/active_record/validations.rb:43:in `save'
activerecord (3.0.0) lib/active_record/attribute_methods/dirty.rb:21:in `save'
activerecord (3.0.0) lib/active_record/transactions.rb:237:in `block (2 levels) in save'
activerecord (3.0.0) lib/active_record/transactions.rb:289:in `block in with_transaction_returning_status'
activerecord (3.0.0) lib/active_record/connection_adapters/abstract/database_statements.rb:139:in `transaction'
activerecord (3.0.0) lib/active_record/transactions.rb:204:in `transaction'
activerecord (3.0.0) lib/active_record/transactions.rb:287:in `with_transaction_returning_status'
activerecord (3.0.0) lib/active_record/transactions.rb:237:in `block in save'
activerecord (3.0.0) lib/active_record/transactions.rb:248:in `rollback_active_record_state!'
activerecord (3.0.0) lib/active_record/transactions.rb:236:in `save'
active_scaffold (3.0.12) lib/extensions/unsaved_record.rb:15:in `save_with_unsaved_flag'
activerecord (3.0.0) lib/active_record/associations/has_many_association.rb:66:in `insert_record'
activerecord (3.0.0) lib/active_record/associations/association_collection.rb:136:in `block (3 levels) in <<'
activerecord (3.0.0) lib/active_record/associations/association_collection.rb:479:in `add_record_to_target_with_callbacks'
activerecord (3.0.0) lib/active_record/associations/association_collection.rb:135:in `block (2 levels) in <<'
activerecord (3.0.0) lib/active_record/associations/association_collection.rb:133:in `each'
activerecord (3.0.0) lib/active_record/associations/association_collection.rb:133:in `block in <<'
activerecord (3.0.0) lib/active_record/associations/association_collection.rb:158:in `block in transaction'
activerecord (3.0.0) lib/active_record/connection_adapters/abstract/database_statements.rb:139:in `transaction'
activerecord (3.0.0) lib/active_record/transactions.rb:204:in `transaction'
activerecord (3.0.0) lib/active_record/associations/association_collection.rb:157:in `transaction'
activerecord (3.0.0) lib/active_record/associations/association_collection.rb:132:in `<<'
app/models/book_job.rb:27:in `block in initialize_updates'
Am getting the above error in Rails 3.0.0 and 3.0.3 also.
I'm testing the acts_as_audited gem (v2.0.0.rc7) on a demo application. A few of my model classes are descendants of Application. I noticed the audit record uses 'Application' instead of my model class constantized name. I tried to change this myself, but I cannot find where auditable_type is set within the gem. Below is an example audit record:
=> #<Audit id: 17, auditable_id: 648, auditable_type: "Application", association_id: nil, association_type: nil, user_id: 3, user_type: "User", username: nil, action: "update", audited_changes: {"quantity"=>[1, 2]}, version: 2, comment: nil, remote_address: "127.0.0.1", created_at: "2011-02-27 12:13:50">
I would have expected auditable_type to be 'LineItem' instead of 'Application'. Is the above behavior correct?
I had trouble writing a view for audits, the records wouldn't sort chronologically, so I tried:
ruby-1.9.2-p0 > Audit.order("ID DESC").all.each{|a| puts a.id } 10025 10024 10023 10020 10002 10000 10021 10001 10022
Then I tried to_sql and got surprised:
ruby-1.9.2-p0 > Audit.order("ID DESC").to_sql => "SELECT \"AUDITS\".* FROM \"AUDITS\" ORDER BY version, ID DESC"
Is there a workaround over this issue?
Best regards,
Borna
I get this, despite not setting any mass assignment or protect options:
WARNING: Can't mass-assign protected attributes:
Testing with Rails 2.3.3 on Ruby 1.9 fails.
I'll be making sure it works on 1.8.6, 1.8.7 and 1.9.1 over the next few days. Any work in progress will be on my fork, in the collectiveidea branch.
http://github.com/kennethkalmer/acts_as_audited/tree/collectiveidea
I'm interested in this fork due to the comment requirement functionality.
Does this work with rails3?
when I need to audit a table with a column name "version".
I figured out a workaround for it. But it would be nice to remove the use of "attr_accessor :version" or rename the ":version" to to a not-so-common column name.
as_user should really have an 'ensure' clause to ensure that the thread var is cleared at exit, just in case the block throws an exception
cheers
From what I can tell, the associated audits are only associated with the "new" association. That means, if you change an association, you can't get a complete history of association changes on a model which has_many something.
I think it's a limitation in the data model, but as I'm new to this project, is there a reason that both the new and old association aren't being stored in an audit? Or do you have any ideas of how that would work?
Hopefully this example will explain better what I mean.
class Person
belongs_to :house
end
class House
has_many :persons
end
h1 = House.create
h2 = House.create
p1 = Person.create(:house => h1)
p2 = Person.create(:house => h2)
p1.audits # => [Audit #1]
h1.associated_audits # => [Audit #1]
p2.audits # => [Audit #2]
h2.associated_audits # => [Audit #2]
p2.house = h1
p2.audits # => [Audit #2, Audit #3]
h1.associated_audits # => [Audit #1, Audit #3]
# everything as expected up until here:
h2.associated_audits # => [Audit #2]
# I expected (hoped for) something like this
h2.associated_audits # => [Audit #2, Audit #3]
Please let me know if there's already a way to obtain this information, or if there's a good reason that you can't.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.