Доступ к различным отношениям в разных дочерних контроллерах - PullRequest
0 голосов
/ 03 мая 2018

В рельсах 5 у меня есть модель FatherModel с множеством связей. Мне нужно иметь контроллер (и представления) для каждой связанной модели. Представления разные, но контроллер в основном похож, поэтому я думаю об использовании наследования.

У меня есть FatherController и несколько дочерних контроллеров A, B, C ...

В каждом дочернем контроллере должны быть строки вроде:

@a = @father_model.relationship_a

Как я могу поместить это в FatherController? Я думаю что-то вроде

@model = @father_model.send(:relationship_name)

И объявить :relationship_name в модели ребенка. Это единственный способ?

Также есть способ использовать @a вместо общего @model?

1 Ответ

0 голосов
/ 03 мая 2018

Так как 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...