使用Rails 3.2.17。我的模型中有以下内容:
class Shop < ActiveRecord::Base
before_create :set_next_position
private
def set_next_position
self.position = self.class.where(country_id: country_id).
maximum(:position).to_i + 1
end
end
self
是Shop
个对象。请注意相等于self.class.where...
的行Shop.where...
。在这种情况下,我不知道什么是最佳做法 - 使用Shop.where...
或self.class.where...
?这对我来说是代码味道。
答案 0 :(得分:1)
我会说self.class.where
比班级内的Shop.where
好。这样,如果出于某种原因想要重命名类等,则不必更改内部。
答案 1 :(得分:0)
我现在唯一的区别就是继承。当你有:
class Base
def self.example
42
end
def run_example
Base.example
end
end
class A < Base
def self.example
'not 42'
end
end
A.new.run_example
=> 42
所以当我没有继承权时,我更喜欢Base.example
。在另一种情况下self.class.example
。