2015-06-10 25 views
0
def id_attachment_require_upload? 
    !object.id_attachment? 
end 

... 

def work_attachment_require_upload? 
    !object.work_attachment? 
end 

我想使它如下所示。如何在rails中創建一組方法

array = %w(id address work) 
array.each do |a| 
    def #{a}_attachment_require_upload? 
     !object.#{a}_attachment? 
    end 
end 

有沒有什麼辦法讓我在rails中自動創建一個方法數組,以使我免於冗餘工作。

+0

爲什麼不創建一個更簡單的方法接收參數? – Gerep

+0

@MaxWilliams當我開始使用Ruby時,我對'define_method'或者你所謂的動態創建方法(元編程)沒有任何意見,而且英語不是我的第一語言,所以我覺得很難谷歌的東西像這些。 – jvnill

回答

1

奧雅納的答案看起來像它的路要走,但我不知道是否會object.#{a}_attachment?工作。如果是這樣,那麼我今天就學到了一些新東西。您也可以使用public_send

array = %w[id address work] 
array.each do |a| 
    define_method "#{a}_attachment_require_upload?" do 
    !object.public_send("#{a}_attachment?") 
    end 
end 
+0

沒有傢伙。沒有''「'它不會工作...對不起,我忽略了..謝謝你提到它.. –

3
array = %w(id address work) 
array.each do |a| 
    define_method "#{a}_attachment_require_upload?" do 
    !object.public_send("#{a}_attachment?") 
    end 
end 
相關問題