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>

但我希望他们明显显示不同的注册表单,这需要我假设的不同路线。

User 模型的唯一区别是,对于 Medical Professional,Medical Professional 的布尔属性将为“真”,而对于普通乔则为假。

有没有一种简单的方法可以做到这一点?

4

1 回答 1

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 控制器的内部结构可能会发生变化,并且您需要手动保持这些更改同步。

方法 3:根据要求:显示不同的注册表单

使用该参数,您可能会在视图中决定要呈现哪种形式(不好,不时尚,但可以工作:-D)。

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

两种形式都需要携带所有相关的注册属性。这当然是一些代码重复,但在我看来,不必覆盖可能需要在您不注意的情况下更改的 Device 控制器操作。

于 2013-03-25T20:40:27.257 回答