我有N個表和N個函數。所有函數具有相同的代碼只更改表名稱。我可以使所有這些功能都使用通用功能嗎?將表名作爲參數傳遞給ruby方法
像這樣的事情
def funcN
common_func(tableN)
end
private
def common_func(tablename)
"Some Code"
end
我知道可能有多種方式.. 什麼是可能的方式來做到這一點?
我有N個表和N個函數。所有函數具有相同的代碼只更改表名稱。我可以使所有這些功能都使用通用功能嗎?將表名作爲參數傳遞給ruby方法
像這樣的事情
def funcN
common_func(tableN)
end
private
def common_func(tablename)
"Some Code"
end
我知道可能有多種方式.. 什麼是可能的方式來做到這一點?
你非常接近。只是通過一個表名作爲參數傳遞給funcN
:
def funcN(tableN)
common_func(tableN)
end
private
def common_func(tablename)
"Some Code"
end
什麼都是可能的方式來做到這一點?
理論上有無數的方法可以解決某個問題,所以你永遠不會得到這個問題的答案。
P.S.你的命名不符合慣例。這是怎麼會看,如果它做的事:
def func_n(table_name)
common_func(table_name)
end
private
def common_func(table_name)
# code omitted
end
如果型號名稱是funcN
靜態然後只是將它作爲string
例如考慮post
然後funcN("Post")
或從軌道記錄funcN(@record.class.to_s)
在私有方法搭上弦PARAM和你tablename
,您可以通過myModel = tablename.constantize
其轉換成模型,然後就可以繼續與你對模型的代碼行myModel
如果通常在Ruby中稱爲方法的函數位於模型中,則它可以引用table_name。您可以使用模塊共享通用代碼,並將其包含在每個需要它的模型中,例如:
class Person < AR::Base
include CommonCode
end
class Fruit < AR::Base
include CommonCode
end
module CommonCode
def do_something
self.table_name
end
end
Person.new.do_something # => 'people'
Fruit.new.do_something # => 'fruits'
什麼意思是靜態模型名稱?我得到了一次錯誤,但我現在沒有得到它。你能解釋一下,以便我能理解當時我做錯了什麼嗎? – vidal
我的意思是如果你意識到你想要傳遞的模型名稱是靜態的,那麼從活動記錄中獲取它並傳遞將是動態的。 例如,如果模型名稱發佈是肯定的,那麼你可以像funcName(「Post」)那樣靜態地傳遞它。 –