2010-02-19 14 views
4

通常情況下,在導軌用形式助手時,每個字段直接與適當的對象上的方法。使用Rails形成上不存在的方法助手

不過,我有一個表格(用戶註冊)需要包含不屬於用戶模型本身(例如,信用卡詳細資料)的一部分,但需要顯示的字段。

我怎樣才能建立表格,以便我能得到必要的字段,並對其進行驗證,因爲我需要(讓它與我的其他所有驗證配合),而不髒-ING我的用戶模式?

回答

3

我不知道你所說的「髒-ING」您的用戶模型的意思,但你可以使用attr_accessor method做到這一點。這將允許您創建可用於驗證模型的屬性:

class Widget < ActiveRecord::Base 
    attr_accessor :confirmation_email 
    validates_length_of :confirmation_email, :within => 1..10 
end 

要只運行在特定的時間驗證,你可以使用一個:if條件:

validates_length_of :confirmation_email, :within => 1..10, :if => Proc.new { |widget| widget.creation_step > 2 }

您也可以使用類方法,如::if => :payment_complete。有了這些,你應該能夠實現你想要的功能。據我所知,沒有更簡潔的方法。

+0

基本上我不是建設一個直接與有問題的模型的形式。例如,註冊表單可能包含一些用戶屬性,以及一些「丟棄」屬性(例如,您可能在CC網關處觸發並遺忘的屬性)。 如果我創建了我的用戶模型的屬性,我總是需要提供這些屬性對於驗證通過,而我只想在這一位置來驗證這種單一的形式在這些項目上。 – 2010-02-19 09:53:07

+0

我已經添加了關於if條件的信息,這可能是您正在尋找的內容。 – 2010-02-19 14:38:10

1

Yehuda Katz有一個great explaination你如何使用ActiveModel來製作一個與Rails的表單助手兼容的任意類。但是,只有在Rails 3上纔有效。

如果你不生活在最前沿,看Railscasts episode 193, "Tableless Model",它描述瞭如何創建叫聲像足是ActiveRecord::Base它與form_for類。