Как мне создать контроллер для наследования одной таблицы в Rails? - PullRequest
1 голос
/ 27 мая 2010

Я настраиваю наследование одной таблицы, используя ContactEvent в качестве модели, которую ContactEmail, ContactLetter и ContactCall будут все наследовать.

Но я нахожусь в тупике о том, как создать маршрутизацию и контроллер.

Например, допустим, я хочу создать новое ContactEvent с типом Email.

Я бы хотел сделать следующее:

new_contact_event_path(contact, email)

Это будет происходить из модели контакта и из модели электронной почты.

Внутри, я бы подумал, что contact_event_controller должен знать ...

   @contact_event.type = (params[:email]) # get the type based on what was passed in?
   @contact_event.event_id = (params[:email]) #get the id for the correct class, in this case Email.id

Просто не уверен, как это работает ....

Ответы [ 2 ]

3 голосов
/ 15 февраля 2011

У меня была похожая проблема.

Смотри вот как я это решил .

0 голосов
/ 27 мая 2010

Я хотел бы иметь контроллер (и, возможно, представления) для каждого из ваших типов ресурсов. Поэтому добавьте контроллер для ContactEmail, один для ContactLetter и т. Д. Не беспокойтесь о контроллере для базового класса ContactEvent. Тогда ваши пути будут выглядеть примерно так:

new_contact_email_path(@contact) or new_contact_letter_path(@contact)

Тогда действия контроллера будут использовать правильную модель, которую они представляют, то есть:

@contact_email = ContactEmail.new(params[...])

Если вы можете разделить ресурсы трех типов отдельно, вместо того, чтобы пытаться передать тип и построить нужный объект в одном контроллере, вам будет намного проще найти жизнь. Недостатком является то, что вам может понадобиться больше ссылок / форм / представлений в интерфейсе, однако, в зависимости от вашего приложения, это не может быть плохо с точки зрения пользователя.

...