2013-03-25 529 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> 

聯繫,但我希望他們能明顯顯示不同的註冊方式,這需要不同的路線我承擔。

User模型的唯一區別是,對於Medical Professional,Medical Professional的布爾屬性將爲'true',而對於平均值Joe則爲false。

有沒有簡單的方法來做到這一點?

回答

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:覆蓋設計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