方法 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 控制器操作。