Одна модель и контроллер, но несколько разные виды и маршруты в рельсах3 - PullRequest
1 голос
/ 11 октября 2010

У меня есть модель уведомлений, и она в основном обрабатывает те же самые вещи. Простая контактная форма, форма приглашения и т. Д. Все они имеют одинаковые общие элементы ... т.е. имя, адрес электронной почты, комментарий, бла.

Может быть одно немного отличающееся поле, но они являются необязательными, поэтому я хотел бы рассматривать их как одну модель с дифференцирующим полем, называемым: notification_type so Invitation или Feedback, и т. Д. в подпапках под уведомлениями (уведомления / приглашения /).

У меня это нормально работает с чем-то вроде этого в моих маршрутах:

маршруты

resources :notifications
match 'invites' => 'notifications#new', :defaults => { :notification_type => 'invitation' } 

Я передаю тип уведомления ...

new.html.erb

<% if params[:notification_type] or params[:notification][:notification_type] == "invitation" %>
 <%= render "notifications/invitations/form" %>
<% end %>

form.html.erb

Я передаю скрытое поле для типа уведомления

<%= f.input :notification_type, :as => 'hidden', :input_html => { :value => @notification.notification_type ||= params[:notification_type] } %>

Кажется, все работает ... единственное предостережение в том, что если они создают ошибку, он отправляет их на маршрут /notification вместо того, чтобы быть в приглашениях ... но все равно работает правильно, но мне интересно, есть ли более простой способ сделать то же самое? Из уровня контроллера? Я чувствую, что что-то удивит меня позже, когда оно стоит.

1 Ответ

0 голосов
/ 01 декабря 2011

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

Так что, чтобы быть ясным, я должен был моделировать Приглашение и Обратная связь. Каждая модель установит для «имя_таблицы» значение «уведомления», наследует от «Уведомления», а затем установит уведомление по умолчанию в методе инициализации или использует блок: defaults, который уже есть в ваших маршрутах. Это немного более гибкий и явный IMO.

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