一般來說,我有一個網站需要有複雜的註冊過程。在那個註冊過程中,我需要包含來自數據庫的4個表。軌道模型和驗證的高級紅寶石
現在...我無法逐一驗證模型並在數據庫中輸入4個模型。有沒有辦法在一個模型中創建所有表格的共同點?
比方說: User
模型列:username, name
等 Package
模式有:type, account_number
等
而且在註冊過程中,我需要包括用戶名,姓名,ACCOUNT_NUMBER並驗證它們。怎麼做?
一般來說,我有一個網站需要有複雜的註冊過程。在那個註冊過程中,我需要包含來自數據庫的4個表。軌道模型和驗證的高級紅寶石
現在...我無法逐一驗證模型並在數據庫中輸入4個模型。有沒有辦法在一個模型中創建所有表格的共同點?
比方說: User
模型列:username, name
等 Package
模式有:type, account_number
等
而且在註冊過程中,我需要包括用戶名,姓名,ACCOUNT_NUMBER並驗證它們。怎麼做?
沒有看到你的模型結構,這只是猜測,但在這裏有雲:
-
虛擬屬性
在你User
模型,你可以使用attr_accessor
創建一組virtual attributes
- 這基本上意味着您可以在User
模型中創建一系列setter/getter
方法。
雖然我不認爲這會直接幫助你,它應該給你一個想法,如何創建單一模型驗證:
#app/models/user.rb
Class User < ActiveRecord::Base
attr_accessor :new, :values, :to, :validate
validates, :new, :values, :to, :validate, presence: true
end
這將允許您創建的屬性User
模型 - 雖然他們不會被保存,然後你可以用它們來驗證對
attr_accessor
爲了讓您快速瞭解這種方法,您首先需要記住Rails只是modules
和classes
的集合。
這意味着您加載的每個model
只是一個class
,其中已填充了一系列getter
/setter
方法。這些方法是由ActiveRecord
從數據表中的列定義,是爲什麼,你可以叫@user.attribute
神奇的是,如果你使用attr_accessor
,你基本上是在User
模型中創建自己的屬性 - 該不會是保存在數據庫中,但會像其他被視爲屬性,你的對象有,讓你來驗證他們
因爲您的註冊過程似乎很複雜,我會去,甚至futher虛擬屬性和使用表單對象
7 Patterns to Refactor Fat ActiveRecord Models
不要忘了這個Railscast:http://railscasts.com/episodes/416-form-objects –
我明白你多級註冊。您不應僅因爲您的視圖頁面需要而創建4個模型。應該:
User
模型和每個窗體ActiveModel
或用戶寶石reform
延伸)上添加驗證form.valid?
將用戶信息的一部分保存到@user
對象就是這樣。
看看[嵌套窗體](http://railscasts.com/episodes/196-nested-model-form-part-1)和一些[現有問題](http://stackoverflow.com/questions/19273698 /如何對化妝確保孩子-對象是化有效而節省父)。這個想法是,如果子對象無效,您可以拒絕保存父對象。 – twonegatives
另請參見團隊:http://apidock.com/rails/Module/delegate – ReggieB