我希望有人能幫助指導我做到這一點的最佳方式。我設立一個註冊表單的人列出他們的技能/證書在各個工作崗位基於用戶輸入的動態表單和模型創建
架構是沿着使用Mongoid和繼承
這些線路class Person
include Mongoid::Document
field :name, :type => String
field :education, :type => String
end
class Accountant < Person
field :cpa, :type => Boolean
field :active_cpa, :type => Boolean
end
class SoftwareDeveloper < Person
field :full_stack, :type => Boolean
field :language, :type => Array
end
因此,用戶會來一個註冊網頁的mysite .com /個人/新會有一種表格可以選擇各種工作(按各行業列出和分組:財務,工程,市場營銷),並根據用戶的選擇,更詳細的視圖將顯示特定於該工作職能。 (例如軟件開發人員可以列出編程語言,會計師可以列出他們是否擁有CPA)。
我的問題是,在控制器和視圖層處理這個問題的最好方法是什麼?有大約100個不同的工作職能我所覆蓋,所以我想結合控制器和視圖,而不是將用戶重定向到mysite.com/accountants/new或mysite.com/engineers/new併爲每個控制器/視圖具體的工作。
有人可以請幫助指導我解決這個問題的最佳方法嗎?我知道我將不得不使用jQuery,也許一些ajax調用來渲染詳細的表單,但是我怎麼處理控制器,因爲form_for最初與用戶綁定在一起,並且模型的屬性有限,所以我不知道如何獲取參數並將它們傳遞到參數hash中,以進行更具體的作業驗證
感謝您的支持。這非常有幫助。我正在花這個週末試圖在我的代碼中實現這一點。你可能會給我一個你提到的.change()方法的例子嗎?我不確定是否應該爲每個job_type加載所有不同的字段集,或者只是基於所選的job_type添加特定字段。無論如何,感謝您的幫助! –
是的,我可以用示例更改方法更新答案。你可以在.change方法中做的一件事就是從服務器動態加載所選作業類型的字段集。有人主張使用JSON來做AJAX,有時候也沒關係。但在這種情況下,您希望您的表單片段已準備好從服務器加載格式化。這樣你就可以在ERB的服務器端完成你所有的佈局,或者你不需要在JavaScript中創建來自JSON等的表單字段。 – OzBandit
你可能想檢查'params [:job_type]'是在將它傳遞給'.constantize.new'以避免任意代碼執行之前,它是一個授權值。 – ybart