2013-03-25 4 views
2

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

<li><%= link_to "Sign up", new_user_registration_path %></li> 
<li><%= link_to "Are you a Medical Professional?", new_user_registration_path %></li> 

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

Единственная разница в модели пользователя будет заключаться в том, что для медицинского профессионала логический атрибут для Medical Professional будет «истинным», тогда как это значение неверно для среднего Джо.

Есть ли простой способ сделать это?

ответ

2

Подход 1: Упорно выбор в скрытом поле

<li><%= link_to "Sign up", new_user_registration_path %></li> 
<li><%= link_to "Are you a Medical Professional?", new_user_registration_path(medical: true) %></li> 

Вы можете использовать параметр в пути для быстрого решения: new_user_registrations_path(medical: true) приведет к маршруту с добавленным ?medical=true).

В вашей регистрационной форме вы можете проверить, установлен ли параметр, а затем установить скрытое поле, чтобы запомнить параметр.

# Remember the medical user setting 
<%= f.check_box :medical, checked: params[:medical].true?, hidden: true %> 

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

подход 2: Переопределение DEViSE RegistrationsController

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

Подход 3: В соответствии с просьбой: отображение различной формой регистрации

Использованием параметра вы можете решить в представлении, какая форма для отображения (не красиво, а не стильные, но работает :-D).

<% if params[:medical] %> 
    <%= render 'medical_signup_form' %> 
<% else %> 
    <%= render 'regular_signup_form' %> 
<% end %> 

Обе формы должны будут нести все соответствующие атрибуты регистрации. Это, безусловно, дублирование кода, но, на мой взгляд, не стоит переоценивать действие контроллера устройства, которое может потребоваться изменить, если вы не заметите.

+0

Большое спасибо. Похоже, что это сработает, однако я надеюсь показать другую страницу регистрации в зависимости от ссылки, которую они нажимают. Есть ли способ проверить параметр на уровне контроллера и отобразить другую страницу (с другой формой на ней)? Если вы измените свой ответ, не удаляйте предоставленную вами информацию, так как это очень полезно. Благодарю. – Leahcim

+0

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

+0

Спасибо, я ценю помощь. – Leahcim

Смежные вопросы