2016-11-11 55 views
-1

我有N个表和N个函数。所有函数具有相同的代码只更改表名称。我可以使所有这些功能都使用通用功能吗?将表名作为参数传递给ruby方法

像这样的事情

def funcN 
    common_func(tableN) 
end 

private 

def common_func(tablename) 
    "Some Code" 
end 

我知道可能有多种方式.. 什么是可能的方式来做到这一点?

回答

1

你非常接近。只是通过一个表名作为参数传递给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 
2

如果型号名称是funcN静态然后只是将它作为string例如考虑post然后funcN("Post")或从轨道记录funcN(@record.class.to_s)

在私有方法搭上弦PARAM和你tablename,您可以通过myModel = tablename.constantize

其转换成模型,然后就可以继续与你对模型的代码行myModel

+0

什么意思是静态模型名称?我得到了一次错误,但我现在没有得到它。你能解释一下,以便我能理解当时我做错了什么吗? – vidal

+0

我的意思是如果你意识到你想要传递的模型名称是静态的,那么从活动记录中获取它并传递将是动态的。 例如,如果模型名称发布是肯定的,那么你可以像funcName(“Post”)那样静态地传递它。 –

0

如果通常在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' 
相关问题