Это плохая практика иметь два контроллера для одной модели в Ruby on Rails? - PullRequest
7 голосов
/ 20 февраля 2011

У меня есть модель, которая обрабатывается по-разному в зависимости от параметра, который она содержит, например, она похожа на таблицу символов, которая также используется для неигровых персонажей, поскольку они имеют одинаковые атрибуты. Таким образом, он будет иметь логическое или целое число, которое будет указывать, является ли он персонажем игрока или неигровым персонажем. А неигровые персонажи будут генерироваться автоматически с произвольными параметрами статуса и именами.

Поскольку методы, используемые для этих двух типов, радикально различаются, я, хотя и было бы логично иметь для них другой класс контроллеров, но это привело бы к тому, что в одной модели было бы два разных контроллера, и это было бы несколько странно.

Это плохая практика? Должен ли я делать все кодирование в одном контроллере?

Ответы [ 2 ]

6 голосов
/ 20 февраля 2011

На самом деле для меня это звучит так, будто у вас должно быть две разные модели. Если способ, которым вы взаимодействуете с объектами, радикально отличается, как вы объяснили, тогда они действительно не должны быть одного и того же класса. У Ruby есть отличный способ разобраться с этим делом: модули. Вы можете использовать модули для создания общих поведений для объектов. Вы даже можете хранить неигровые символы и символы в одной таблице базы данных, переопределив имя таблицы ActiveRecord. Например:

module Character
  def decrease_hitpoints x
    ...
  end
  # other shared functionality can go here
end

class PlayerCharacter < ActiveRecord::Base
  set_table_name 'characters'
  include Character
end

class NonPlayerCharacter < ActiveRecord::Base
  set_table_name 'characters'
  include Character
end

В этом примере оба PlayerCharacter и NonPlayerCharacter имеют одинаковое имя таблицы и функциональность, определенные в Character, но это разные объекты.

Наконец, вполне нормально использовать два или более контроллеров для одной модели, так же как и контроллер, который вообще не зависит от модели.

1 голос
/ 20 февраля 2011

Это полностью нормально. То, что вы описываете, - это пользовательский интерфейс на основе задач, в котором вы больше заинтересованы в захвате рабочего потока или процесса, а не простой CRUD или операции с ресурсами. Помните, настройки по умолчанию в Rails должны быть очень простыми. Не стесняйтесь углубляться в основы.

...