Ruby on rails 在不同的子控制器中访问不同的关系

Ruby on rails 在不同的子控制器中访问不同的关系,ruby-on-rails,ruby,inheritance,activerecord,Ruby On Rails,Ruby,Inheritance,Activerecord,在rails 5中,我有一个有很多关系的模型FatherModel。 我需要有一个控制器(和视图)为每个相关的模型。 视图不同,但控制器基本相似,因此我考虑使用继承 我有一个父亲 和多个子控制器A、B、C 在每个子控制器中,都需要像这样的行: @a = @father_model.relationship_a 我怎么能把这个放在父亲的控制器里?我在想 @model = @father_model.send(:relationship_name) 并在childs模型中声明:关系\u name

在rails 5中,我有一个有很多关系的模型FatherModel。 我需要有一个控制器(和视图)为每个相关的模型。 视图不同,但控制器基本相似,因此我考虑使用继承

我有一个父亲 和多个子控制器A、B、C

在每个子控制器中,都需要像这样的行:

@a = @father_model.relationship_a
我怎么能把这个放在父亲的控制器里?我在想

@model = @father_model.send(:relationship_name)
并在childs模型中声明
:关系\u name
。 这是唯一的办法吗


另外,还有一种方法可以使用
@a
而不是通用的
@model

因为Ruby是一种动态语言,所以它允许您实现这种魔力

首先,您可以使用方法获取当前控制器的名称

因此,以下行:

@a = @father_model.relationship_a
可以重写为以下内容(取决于控制器和关联的真实名称):

此外,还有一些方法可以使用
@a
而不是通用
@model

是的,您可以使用以下方法动态定义实例变量:


但同样,上面的代码假设您实际拥有一个名为
a
的控制器,以及一个名为
的关系\u a

由于Ruby是一种动态语言,它允许您实现这种魔力

首先,您可以使用方法获取当前控制器的名称

因此,以下行:

@a = @father_model.relationship_a
可以重写为以下内容(取决于控制器和关联的真实名称):

此外,还有一些方法可以使用
@a
而不是通用
@model

是的,您可以使用以下方法动态定义实例变量:

但同样,上面的代码假设您实际拥有一个名为
a
的控制器,以及一个名为
relationship\u a

instance_variable_set(:"@#{controller_name}", @father_model.send("relationship_#{controller_name}"))