小编Mar*_* S.的帖子

如何为每个表在Rails中创建完整的审核日志?

我们最近开始在我们公司进行合规性推动,并且需要保留我们目前在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 activerecord ruby-on-rails observer-pattern

20
推荐指数
3
解决办法
1万
查看次数

允许用户拖放表行以更改其顺序的最简单方法是什么?

我有一个Ruby on Rails应用程序,我正在编写一个用户可以选择编辑发票的应用程序.他们需要能够重新分配行的顺序.现在我在db中有一个索引列,用作默认排序机制.我刚刚曝光并允许用户编辑它.

这不是很优雅.我希望用户能够拖放表格行.我已经使用了Scriptaculous和Prototype,并熟悉它们.我已经完成了拖放列表,但没有像这样完成表行.任何人都有任何建议,不仅要重新排序,还要有效地捕获重新订购?

此外,用户现在可以在JS中动态创建新行,因此该行也必须可重新排序.

如果可以使用RJS而不是直接JavaScript来完成加分.

html ajax ruby-on-rails

12
推荐指数
1
解决办法
3250
查看次数

如何在OpenGLES中翻转精灵/纹理?

我有一个精灵作为纹理加载,我需要动画它,允许它"向左"或向右" - 有时我需要"翻转"它.我知道OpenGL有一个重新定位对象的gltranslate,以及旋转它的glrotate.是否有一种方法可以简单地将其翻过一个轴?如果没有,你会如何做到这一点?

opengl iphone objective-c

6
推荐指数
1
解决办法
5773
查看次数