我有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”)那样静态地传递它。 –