两种不同的报名表格

时间:2013-03-25 19:55:42

标签: ruby-on-rails devise

我正在使用Devise进行申请,其中普通的Joe-citizen可以提出问题,希望可以由某种医疗专业人员来回答。在我的主页上,我希望有两个这样的注册链接

<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,Medical Professional的布尔属性将为“true”,而对于普通的Joe来说则为false。

有一种简单的方法吗?

1 个答案:

答案 0 :(得分: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 %>

这两种形式都需要携带所有相关的注册属性。这肯定是一些代码重复,但在我看来,不值得重写Device的控制器操作,可能需要在不注意的情况下进行更改。