我们最近开始在我们公司进行合规性推动,并且需要保留我们目前在Rails应用程序中管理的数据的完整历史记录.我们已经可以将每个操作的描述性内容简单地推送到日志文件中,这是一种相当不引人注目的方式.
我倾向于做这样的事情ApplicationController:
around_filter :set_logger_username
def set_logger_username
Thread.current["username"] = current_user.login || "guest"
yield
Thread.current["username"] = nil
end
Run Code Online (Sandbox Code Playgroud)
然后创建一个看起来像这样的观察者:
class AuditObserver < ActiveRecord::Observer
observe ... #all models that need to be observed
def after_create(auditable)
AUDIT_LOG.info "[#{username}][ADD][#{auditable.class.name}][#{auditable.id}]:#{auditable.inspect}"
end
def before_update(auditable)
AUDIT_LOG.info "[#{username}][MOD][#{auditable.class.name}][#{auditable.id}]:#{auditable.changed.inspect}"
end
def before_destroy(auditable)
AUDIT_LOG.info "[#{username}][DEL][#{auditable.class.name}][#{auditable.id}]:#{auditable.inspect}"
end
def username
(Thread.current['username'] || "UNKNOWN").ljust(30)
end
end
Run Code Online (Sandbox Code Playgroud)
并且通常这很有用,但是当使用<association>_ids加入has_many:through =>关联的"魔法" 方法时它会失败.
例如:
# model
class MyModel
has_many :runway_models, :dependent => :destroy
has_many :runways, :through => :runway_models
end
#controller
class MyModelController …Run Code Online (Sandbox Code Playgroud) 我有一个Ruby on Rails应用程序,我正在编写一个用户可以选择编辑发票的应用程序.他们需要能够重新分配行的顺序.现在我在db中有一个索引列,用作默认排序机制.我刚刚曝光并允许用户编辑它.
这不是很优雅.我希望用户能够拖放表格行.我已经使用了Scriptaculous和Prototype,并熟悉它们.我已经完成了拖放列表,但没有像这样完成表行.任何人都有任何建议,不仅要重新排序,还要有效地捕获重新订购?
此外,用户现在可以在JS中动态创建新行,因此该行也必须可重新排序.
如果可以使用RJS而不是直接JavaScript来完成加分.
我有一个精灵作为纹理加载,我需要动画它,允许它"向左"或向右" - 有时我需要"翻转"它.我知道OpenGL有一个重新定位对象的gltranslate,以及旋转它的glrotate.是否有一种方法可以简单地将其翻过一个轴?如果没有,你会如何做到这一点?