3
我想動態驗證一個對象。Rails元編程10 x 0我
在我的應用程序中,用戶可以創建將成爲表單一部分的問題,每個問題可以有 驗證。
所以,我張貼這種形式,並且帕拉姆傳遞到下面的類:
require 'ostruct'
class QuestionResponse < OpenStruct
include ActiveModel::Validations
include ActiveModel::Conversion
extend ActiveModel::Naming
extend ActiveModel::Callbacks
def fields
@table.keys
end
def add_validators
stored_questions = AdmissionForm.find(self.form_id).questions.all
questions = fields.select{|f| f.to_s[0]=="q"}
questions.each do |question_param|
question = stored_questions.select{|f| f["id"] == question_param.to_s.gsub("q_","").to_i}.first
unless question.validations.empty?
validations = "validates :#{question_param} , #{question.validations.join(",")}"
self.class.instance_eval validations
end
end
end
def initialize(*args)
super
add_validators if self.fields.any?
end
def persisted? ; false ; end;
end
它幾乎工作。 我的問題是,隨後的表單提交,加載ActiveModel串聯::錯誤
#<ActiveModel::Errors:0x00000004432520
@base=#<QuestionResponse q_7="", q_6="", form_id="1">,
@messages=
{:q_7=>["cant be blank", "cant be blank"],
:q_6=>["cant be blank", "cant be blank"]}>
我在做什麼錯?
謝謝!
亞歷
不self.class.instance_eval是否僅添加到當前實例?如果不是,有沒有辦法做到這一點?謝謝! –
您在QuestionResponse上調用instance_eval,所以最終修改了QuestionResponse類 – aromero