0

编辑:

我试图重构这个:

self.before_create do |obj|
  obj.position = self.class.count
end

对此:

self.before_create :set_position

private

def set_position
  obj.position = self.class.count
end

但是,它的显示错误:

 undefined local variable or method `obj'

如何解决这个问题?

4

2 回答 2

2
class YourClass < AR

  before_create :set_position

  private

  def set_position
    self.position = @@count
  end
end

set_position方法是实例方法,因此self被分配给实例。我count认为应该是一个类变量。

于 2012-08-14T00:14:10.893 回答
1
class Something < ActiveRecord::Base
  before_create :set_position

  protected
  def set_position
    self.position = self.class.count
  end
end

请注意,如果您使用类变量,如果您的服务器使用多个进程(它们之间不同步),您可能会遇到麻烦@@countcount来自 db的功能样式查询。

注意:很多这种行为(包括正确实现的对列表的原子更改)可以在acts_as_list gem 中找到,它曾经是Rails 的一部分。我建议使用它。

于 2012-08-13T23:39:48.353 回答