在rails 5中,我有一个拥有大量关系的模型FatherModel。 我需要为每个相关模型都有一个控制器(和视图)。 视图是不同的,但控制器大多相似,所以我正在考虑使用继承。
我有一个FatherController 和多个子控制器A,B,C ......
在每个子控制器中都需要像以下几行:
@a = @father_model.relationship_a
我如何将它放在FatherController中?我在想像
@model = @father_model.send(:relationship_name)
并在childs模型中声明:relationship_name
。
这是唯一的方法吗?
此外,还有一些方法可以使用@a
代替通用@model
吗?
答案 0 :(得分:2)
由于Ruby是一种动态语言,它允许你实现这种魔术。
首先,您可以使用方法controller_name
获取当前控制器的名称因此,以下一行:
@a = @father_model.relationship_a
可以改写为类似的东西(取决于你的控制器的实名和关联):
@a = @father_model.send("relationship_#{controller_name}")
此外,还有一些方法可以使用
@a
代替通用@model
吗?
是的,您可以使用instance_variable_set方法动态定义实例变量:
instance_variable_set(:"@#{controller_name}", @father_model.send("relationship_#{controller_name}"))
但同样,上面的代码假设您实际上拥有名称为A
且名称为relationship_a