我試圖執行custom attribute accessors with validation
。Ruby:自定義實現屬性訪問器驗證
比方說attr_validated
。現在這個attr_validated
1:應該有與attr_accessor相同的setter和getter方法。 ##這部分完成。
2:它應該驗證給定的塊。
attr_validated :num_legs do |v|
v <= 4
end
這個問題可能看起來像任何其他問題,但它不是。 雖然google搜索,我得到
1: IST部分
class Class
def attr_validated(*args)
args.each do |arg|
# getter
self.class_eval("def #{arg};@#{arg};end")
# setter
self.class_eval("def #{arg}=(val);@#{arg}=val;end")
end
end
end
class Dog
attr_validated :num_legs ## Instead of this i need to validate a block also attr_validated :num_legs do |v|
v <= 4
end
dog = Dog.new
p dog.num_legs
p dog.num_legs = 'Stack'
2:我們該如何實施第二部分。
任何幫助將不勝感激!!!
許多許多謝謝@PawełDawczak ..它解決了我的問題。仍然我有一件事,塊條件將適用於每一個屬性..我們可以只爲第一參數.. – VKatz
@Vinay - 請檢查更新的答案 –
@Vinay通常這樣的方法適用於塊條件的所有項目,不只是第一個,至少是由Rails的約定來規定的。如果您需要更有選擇性地應用它們,請進行多個「attr_validated」調用,其中一個調用塊,另一個不調用。您可能還想採用如下模式:'attr_validated:example,with: - > {| v | v.length> 6}'作爲lambda傳入。 – tadman