复制 Rails 代码的最佳方法是什么?
What's the best way to duplicate Rails code?
所以我开发了数据库的前端。控制器具有全部 7 个标准动作以及更多。视图由索引、编辑、新建等组成。现在我需要再制作 3 个,它们唯一不同的地方实际上是一行,因为我正在为每个控制器操作调用 table 到 fetch/edit 信息唯一不同的是每个数据库视图的 table 名称。如果不只是将相同的代码复制 3 次并更改一个变量,有什么好的方法可以做到这一点?
控制器示例:
server = windows_prod
def index
@servers = connection.exec_query("SELECT [COL1]...[COLN] FROM #{server}")
end
其余的操作都是按照这些思路进行的,唯一需要更改的是顶部的服务器分配。
考虑将可重用控制器逻辑放入 Mixin 中。这看起来像:
module ReusableControllerLogic
def index
@servers = connection.exec_query("SELECT [COL1]...[COLN] FROM #{server}")
end
def show
# Blah
end
end
现在,您可以在定义名为 server
的方法的任何控制器上使用此 Mixin。此方法应 return 所需的服务器名称:
class AwesomeController < ApplicationController
include ReusableControllerLogic
private
def server
"awesome"
end
end
所以我开发了数据库的前端。控制器具有全部 7 个标准动作以及更多。视图由索引、编辑、新建等组成。现在我需要再制作 3 个,它们唯一不同的地方实际上是一行,因为我正在为每个控制器操作调用 table 到 fetch/edit 信息唯一不同的是每个数据库视图的 table 名称。如果不只是将相同的代码复制 3 次并更改一个变量,有什么好的方法可以做到这一点?
控制器示例:
server = windows_prod
def index
@servers = connection.exec_query("SELECT [COL1]...[COLN] FROM #{server}")
end
其余的操作都是按照这些思路进行的,唯一需要更改的是顶部的服务器分配。
考虑将可重用控制器逻辑放入 Mixin 中。这看起来像:
module ReusableControllerLogic
def index
@servers = connection.exec_query("SELECT [COL1]...[COLN] FROM #{server}")
end
def show
# Blah
end
end
现在,您可以在定义名为 server
的方法的任何控制器上使用此 Mixin。此方法应 return 所需的服务器名称:
class AwesomeController < ApplicationController
include ReusableControllerLogic
private
def server
"awesome"
end
end