gpt4 book ai didi

ruby-on-rails - Rails 元编程 10 x 0 Me

转载 作者:行者123 更新时间:2023-12-02 12:29:00 24 4
gpt4 key购买 nike

我正在尝试动态验证对象。

在我的应用程序上,用户可以创建将成为表单一部分的问题,每个问题都可以有验证。

因此,我发布此表单,并将参数传递给以下类:

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::Errors

#<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"]}>

我做错了什么?

谢谢!

亚历克斯

最佳答案

add_validatorsQuestionResponse 的每个实例上都会被调用,这会将验证添加到 QuestionResponse 的类中。每个新实例都会将其自己的验证添加到类中,但您仍然拥有其他(之前创建的)实例添加的验证。

关于ruby-on-rails - Rails 元编程 10 x 0 Me,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14507438/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com