访问不同子控制器中的不同关系

时间:2018-05-03 07:13:29

标签: ruby-on-rails ruby inheritance activerecord

在rails 5中,我有一个拥有大量关系的模型FatherModel。 我需要为每个相关模型都有一个控制器(和视图)。 视图是不同的,但控制器大多相似,所以我正在考虑使用继承。

我有一个FatherController 和多个子控制器A,B,C ......

在每个子控制器中都需要像以下几行:

@a = @father_model.relationship_a

我如何将它放在FatherController中?我在想像

@model = @father_model.send(:relationship_name)

并在childs模型中声明:relationship_name。 这是唯一的方法吗?

此外,还有一些方法可以使用@a代替通用@model吗?

1 个答案:

答案 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

的控制器