通常情況下,在導軌用形式助手時,每個字段直接與適當的對象上的方法。使用Rails形成上不存在的方法助手
不過,我有一個表格(用戶註冊)需要包含不屬於用戶模型本身(例如,信用卡詳細資料)的一部分,但需要顯示的字段。
我怎樣才能建立表格,以便我能得到必要的字段,並對其進行驗證,因爲我需要(讓它與我的其他所有驗證配合),而不髒-ING我的用戶模式?
通常情況下,在導軌用形式助手時,每個字段直接與適當的對象上的方法。使用Rails形成上不存在的方法助手
不過,我有一個表格(用戶註冊)需要包含不屬於用戶模型本身(例如,信用卡詳細資料)的一部分,但需要顯示的字段。
我怎樣才能建立表格,以便我能得到必要的字段,並對其進行驗證,因爲我需要(讓它與我的其他所有驗證配合),而不髒-ING我的用戶模式?
我不知道你所說的「髒-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
。有了這些,你應該能夠實現你想要的功能。據我所知,沒有更簡潔的方法。
Yehuda Katz有一個great explaination你如何使用ActiveModel
來製作一個與Rails的表單助手兼容的任意類。但是,只有在Rails 3上纔有效。
如果你不生活在最前沿,看Railscasts episode 193, "Tableless Model",它描述瞭如何創建叫聲像足是ActiveRecord::Base
它與form_for
類。
基本上我不是建設一個直接與有問題的模型的形式。例如,註冊表單可能包含一些用戶屬性,以及一些「丟棄」屬性(例如,您可能在CC網關處觸發並遺忘的屬性)。 如果我創建了我的用戶模型的屬性,我總是需要提供這些屬性對於驗證通過,而我只想在這一位置來驗證這種單一的形式在這些項目上。 – 2010-02-19 09:53:07
我已經添加了關於if條件的信息,這可能是您正在尋找的內容。 – 2010-02-19 14:38:10