2016-01-24 54 views
0

使用Rails 3.2.17。我在我的模型如下:在Rails模型中搜索相同的類

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 

selfShop對象。注意行self.class.where...這相當於Shop.where...。在這種情況下,我不知道最佳做法是什麼 - 使用Shop.where...self.class.where...?這是代碼味道給我。

+2

我會說'self.class.where'比類中的'Shop.where'更好。這樣,如果由於某種原因您想要重命名類,則無需在內部進行更改。 – Babar

+0

@ollaollu它從一個回調'before_create'中調用。我需要在保存之前設置新對象的位置。 – Victor

+0

注意到在評論 – ollaollu

回答

1

我會說self.class.where比班級體內的Shop.where好。這樣,如果由於某種原因您想要重命名類,則無需在內部進行更改。

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