我有N个表和N个函数。所有函数只有相同的代码表名更改。我是否可以使所有这些功能都使用通用功能。
像这样的东西
def funcN
common_func(tableN)
end
private
def common_func(tablename)
"Some Code"
end
我知道可能有多种方式.. 有哪些方法可以做到这一点?
答案 0 :(得分:2)
如果型号名称在<script type="text/javascript">
board = JXG.JSXGraph.initBoard('jxgbox3',
{
axis:true,
boundingbox:[-5.9,8,5.9,-5.9],
keepaspectratio:true,
showCopyright:false,
showNavigation:false
});
var qr = [], arc2,isInDragMode;
qr[1] = board.create('point', [0,0],
{style:5,fillColor:'#ff00ff'});
qr[2] = board.create('point', [5,0],
{style:5,fillColor:'#ff00ff'});
qr[3] = board.create('point', [3.85,4.4],
{style:5,fillColor:'#ff00ff'});
var triArr1 = [qr[3],qr[2],qr[1]];
var tri = board.createElement('polygon',triArr1,
{strokeWidth:2, strokeColor:'#dd00dd',highlight:false});
var arc1 = board.create('nonreflexangle',triArr1,
{radius:1,name:'θ2'});
var triArr2 = [qr[2],qr[1],qr[3]];
var arc2 = board.create('nonreflexangle',triArr2,
{radius:1,name:'θ1'});
var triArr3 = [qr[1],qr[3],qr[2]];
var arc3 = board.create('nonreflexangle',triArr3,
,{fixed:false}, {radius:1,name:'θ3'});
board.create('text', [-5, 3, function ()
{
if(arc2.Value() > Math.PI)
{
ang2 = (360 - arc2.Value() * 180 / Math.PI).toFixed(1);
ang1 = (360 - arc1.Value() * 180 / Math.PI).toFixed(1);
ang3 = (360 - arc3.Value() * 180 / Math.PI).toFixed(1);
}
else
{
ang2 = (arc2.Value() * 180 / Math.PI).toFixed(1);
ang1 = (arc1.Value() * 180 / Math.PI).toFixed(1);
ang3 = (arc3.Value() * 180 / Math.PI).toFixed(1);
}
return '<p>θ_1 = ' + ang2 + '°</p>'+'<p>θ_2 = ' + ang1 + '°</p>'+'<p>θ_3 = ' + ang3 + '°</p>'+'<p>θ_1 + θ_2 + θ_3 = 180°</p>';
}],{fixed:false});
中是静态的,那么只需将其作为funcN
传递,例如考虑string
然后post
或从铁轨记录funcN("Post")
< / p>
在私有方法中捕获字符串参数作为您的funcN(@record.class.to_s)
,您可以通过tablename
将其转换为模型
然后您可以继续使用该模型myModel = tablename.constantize
答案 1 :(得分: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 :(得分: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'