2014-06-13 82 views
4

一般來說,我有一個網站需要有複雜的註冊過程。在那個註冊過程中,我需要包含來自數據庫的4個表。軌道模型和驗證的高級紅寶石

現在...我無法逐一驗證模型並在數據庫中輸入4個模型。有沒有辦法在一個模型中創建所有表格的共同點?

比方說: User模型列:username, namePackage模式有:type, account_number

而且在註冊過程中,我需要包括用戶名,姓名,ACCOUNT_NUMBER並驗證它們。怎麼做?

+0

看看[嵌套窗體](http://railscasts.com/episodes/196-nested-model-form-part-1)和一些[現有問題](http://stackoverflow.com/questions/19273698 /如何對化妝確保孩子-對象是化有效而節省父)。這個想法是,如果子對象無效,您可以拒絕保存父對象。 – twonegatives

+0

另請參見團隊:http://apidock.com/rails/Module/delegate – ReggieB

回答

2

沒有看到你的模型結構,這只是猜測,但在這裏有雲:

-

虛擬屬性

在你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只是modulesclasses的集合。

這意味着您加載的每個model只是一個class,其中已填充了一系列getter/setter方法。這些方法是由ActiveRecord從數據表中的列定義,是爲什麼,你可以叫@user.attribute

神奇的是,如果你使用attr_accessor,你基本上是在User模型中創建自己的屬性 - 該不會是保存在數據庫中,但會像其他被視爲屬性,你的對象有,讓你來驗證他們

1

我明白你多級註冊。您不應僅因爲您的視圖頁面需要而創建4個模型。應該:

  1. 刪除驗證從User模型和每個窗體
  2. 創建4種不同的形式
  3. 後添加驗證給每個窗體
  4. (例如通過ActiveModel或用戶寶石reform延伸)上添加驗證form.valid?將用戶信息的一部分保存到@user對象

就是這樣。