我需要从表中加载模型验证并验证我的模型。例如我有一个名为validations的数据库表,其中包含以下行:
validation_action validation_condition
---------------- --------------------
validates_presence_of if answer_name is name
validates_format_of if answer_type is date
在我的模特中我想要:
class Model < ActiveRecord::Base
load validation_actions , lambda {if validation_condition is true}
更多细节:
我正在创建一个用于进行调查的应用。我将问题存储在表格中并将答案存储在另一个表格中。我需要在问题表中存储每个答案的验证,并在接受之前验证每个答案。我可以查询每个问题的验证并在控制器中运行它,但我想在模型中进行,因为它更清洁。
所以有两种模式:
Questions -> table questions sas code and details about questions
Answers -> table answers stores answers with a foreign key to Questions.
我想根据问题数据库表中定义的条件验证Answers模型中的输入。
如果需要更多细节,请告诉我?
答案 0 :(得分:0)
如果我理解正确,您的问题有很多相关的答案,并且还有相关的ValidationActions。保存答案时,您希望基于评估存储在属于其关联的Question对象的ValidationActions中的代码来对其进行验证。
这似乎是一个坏主意。并非如此,验证是以相关对象(问题)的状态为条件的,这种情况确实发生了,但是你正在做的事情相当于从数据库的内容中执行代码。这是使Web开发人员烦躁的事情之一 - 安全问题是最明显的原因(如果有人可以编辑数据库的字段,它们可能导致任意代码在您的系统上运行),但这绝对是一个值得怀疑的做法,即使在外面也是如此那个(我很难说清楚这个原因比'代码是代码和数据是数据而且twain永远不会满足',但它确实存在)。
所有这一切,应该可以编写一个自定义验证器as explained here来处理这个问题。它无疑是低效的,很可能容易破损,并且可能是一个安全漏洞,除非它写得非常仔细。但这是可能的。