1

我想要一個類通過多態關聯屬於其他類。Rails多態關聯:限制允許的類

什麼是最好的方式來限制關聯到一個特定的類列表?

我正在考慮使用自定義的驗證方法,像這樣,但我不知道這是否真的是最好的主意:

class Feature < ActiveRecord::Base 

    belongs_to :featureable, polymorphic: true 

    validate :featurable_is_of_allowed_class 

    FEATURABLE_CLASSES = ["Country", "City", "Store", "Product"] 

    def featurable_is_of_allowed_class 
    if !FEATURABLE_CLASSES.include? featurable.class.name 
     errors.add(:featurable, "class not allowed for association") 
    end 
    end 

end 
+0

如果您希望該類拋出一個錯誤,或者當另一個類具有'has_many:features'時出現某種錯誤,這是不可能的。 –

回答

2

我們用這個驗證(Rails的5)多態ID和類型:

ALLOWED_TYPES = %w(Star Planet).freeze 

validates :moonable_id, presence: true, numericality: { only_integer: true } 
validates :moonable_type, presence: true, inclusion: { in: ALLOWED_TYPES }