道歉,如果這是一個非常常見和/或荒謬的問題;我發誓我已經多次閱讀文檔,並且所有內容似乎都集中在ActiveRecord上,以至於他們已經擺脫了創建或編輯模型數據之外的其他表單路徑。Rails 3:顯示窗體的驗證錯誤(不保存ActiveRecord模型)
以一個輸入爲例來控制一些統計數據的提取和顯示。爲了驗證此表單的用戶輸入,Rails提供了哪些內容,哪些記錄不會調用save
?事情是這樣:
:email
必須爲電子郵件地址:num_products
必須爲正整數:gender
必須是 「M」 或 「F」 的一個:temperature
必須在-10和120
等等等等(那種東西,在大多數web框架標配)...
有沒有什麼在Rails中爲我執行這個任意驗證和一些視圖助手來顯示錯誤列表,或者是一切與ActiveRecord?
道歉,如果我在文檔中忽略了這一點,但this和this並沒有真正覆蓋它,至少在疲倦的眼睛可以告訴。
劃痕頭
多虧了羅布的答案,這裏是我想出。我創建了一個實用程序類(恰當地命名爲Validator
),它只是嵌入到我的控制器中,用於任何需要它的事物。
module MyApp
class Validator
include ActiveModel::Validations
include ActiveModel::Conversion
extend ActiveModel::Naming
def initialize(attributes = {})
super
attributes.each { |n, v| send("#{n}=", v) if respond_to?("#{n}=") }
end
end
end
現在控制器,例如,只定義有點直列類:
class LoginController < ApplicationController
class AuthenticationValidator < MyApp::Validator
attr_accessor :email
attr_accessor :password
validates_presence_of :email, :message => "E-mail is a required field"
validates_presence_of :password, :message => "Password cannot be blank"
end
def authenticate
if request.post?
@validator = AuthenticationValidator.new(params)
if @validator.valid?
# Do something meaningful
end
end
end
感覺有點不必要的堅持每一個組驗證規則在自己.rb
當邏輯更多的是面向控制器的恕我直言。可能有更簡潔的寫法,但我對Ruby和Rails很新。
非常好,謝謝!我會選擇這個除外:)我假設我需要閱讀的是API參考中的'ActiveModel :: Validations'? :)編輯|對不起,忽略了嵌入式鏈接。 – d11wtq 2011-05-02 14:21:43
這正是我需要的,謝謝。我使用這種方法來創建更通用的「Validator」抽象類,以從includes/initialize方法中移除樣板代碼。 – d11wtq 2011-05-02 15:05:00