两种不同的注册表格

问题描述:

我正在使用Devise进行申请,其中平均 - 乔 - 公民可以提出问题,希望可以由某种医疗专业人员回答。在我的主页,我想有两个标志像这样两种不同的注册表格

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

联系,但我希望他们能明显显示不同的注册方式,这需要不同的路线我承担。

User模型的唯一区别是,对于Medical Professional,Medical Professional的布尔属性将为'true',而对于平均值Joe则为false。

有没有简单的方法来做到这一点?

方法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:覆盖设计RegistrationsController

这是完全可能的,刚才看到的文档。不过,在做这件事情时我会感到有点疲惫,因为Devise控制器的内部可能会发生变化,您需要手动同步这些更改。

方法3:根据要求:显示不同的注册形成

使用参数你可能会在视图决定渲染(不是很好,不是时尚,而是工作:-D)的形式。

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

这两种形式都需要携带所有相关的注册属性。这肯定是一些代码重复,但在我看来,值得不必重写设备的控制器操作,可能需要改变,而不会发现。

+0

非常感谢。这看起来像它会工作,但是,我希望显示一个不同的注册页面,取决于他们点击的链接。有没有办法在控制器级别检查参数并呈现不同的页面(使用不同的表单)?如果您修改了答案,请不要删除您已提供的信息,因为这非常有用。谢谢。 – Leahcim 2013-03-25 20:49:28

+0

我已经发布了不同形式的另一种方法。希望能帮助到你。 – 2013-03-25 20:59:13

+0

谢谢,我感谢帮助。 – Leahcim 2013-03-25 21:00:50