2015-06-22 77 views
0

我有一個ActiveRecord模型,Instance,它基於數據庫,但有一些非數據庫屬性。Rails ActiveRecord非數據庫屬性?

一個例子是「分辨率」。

我需要能夠設置/獲取分辨率,但此屬性需要自定義非db設置者/獲取者。我在哪裏放置這些&如何構建我的模型?

我還需要能夠驗證分辨率,因爲它們是通過正則表達式設置的。我可以使用validates_format_of還是需要編寫自定義驗證器?

+0

你是如何「結構」的模型?添加方法。 –

+0

您可以像驗證每個常規屬性一樣驗證虛擬屬性 - http://stackoverflow.com/a/9749292/429758 –

+0

似乎沒有爲我工作;我已經在編寫器方法之外使用了'validates_format_of:resolution,其中:\ \ d + x + \ d + /',但它似乎被忽略。我需要寫一些具體的東西嗎? – cjm2671

回答

2

如果您需要標準讀/寫器的方法,你可以使用attr_accessor

class Instance 
    attr_accessor :resolution 
end 

你也可以自己寫的讀寫器方法:

class Instance 
    def resolution 
    @resolution 
    end 

    def resolution=(value) 
    @resolution = value 
    validate! # this will raise RecordInvalid if the validation fails 
    end 
end 
+0

非常好,謝謝!我已經在編寫器方法之外使用了'validates_format_of:resolution,其中:\ \ d + x + \ d + /',但它似乎被忽略。我需要寫一些具體的東西嗎? – cjm2671

+0

你可以顯示代碼,記錄是在哪裏創建和驗證的? –

+0

我是按照你寫的方式完成的;我只是從控制檯調用Instance.last.resolution ='asdf''。不幸的是,它不是拋出一個錯誤,而是繼續運行作者。 – cjm2671