Ruby on rails 在保存之前动态地将方法设置为on
在我的控制器中,我想动态地将我的实例方法绑定到save回调之前 有什么方法可以动态地将方法绑定到来自控制器端的回调 编辑: 控制器 这是原始代码Ruby on rails 在保存之前动态地将方法设置为on,ruby-on-rails,ruby,callback,Ruby On Rails,Ruby,Callback,在我的控制器中,我想动态地将我的实例方法绑定到save回调之前 有什么方法可以动态地将方法绑定到来自控制器端的回调 编辑: 控制器 这是原始代码 def amfupdate set_properties validate_record if params[:csv_header][:validate_record] == "Y" #On this condition... super end 若条件为true,则我希望设置自定义回调,该回调将在保存前但在保存对象之前精确调用 我想
def amfupdate
set_properties
validate_record if params[:csv_header][:validate_record] == "Y" #On this condition...
super
end
若条件为true,则我希望设置自定义回调,该回调将在保存前但在保存对象之前精确调用
我想在保存之前调用此方法。。但如果控制器端的条件为真
模型中
def validate_record
self.csv_columns.each do |csv_column|
self.errors.add_to_base(_("Invalid column name #{csv_column.column_name}.")) \
unless self.model_name.constantize.column_names.include?(csv_column.column_name)
end
end
我想你是在找下面这样的东西。在模型中:
validate do |instance|
instance.csv_columns.each do |csv_column|
instance.errors.add :csv_columns, "Invalid column name #{csv_column.column_name}"
unless instance.class.column_names.include?(csv_column.column_name)
end
end
这将在保存记录之前调用,如果将错误添加到中,则将中止保存
更新:附带条件验证建议
向模型添加属性
attr_accessor :some_condtional
在控制器中设置此选项
@instance.some_conditional = true # or false
现在验证如下所示:
validate do |instance|
instance.csv_columns.each do |csv_column|
instance.errors.add :csv_columns, "Invalid column name #{csv_column.column_name}"
unless instance.class.column_names.include?(csv_column.column_name)
end if instance.some_conditional
end
或者类似的东西。换句话说,使用模型来保持状态并传达逻辑似乎您做错了什么-尽量避免控制器中的业务逻辑。我不明白您在问什么。你能举一个例子说明你的意思或者你正在努力实现什么吗?我还是要重复tig说的,你正在试图在控制器中做一些你应该在模型中做的事情。您应该将验证设置为常规验证,并使用其他方法来决定是否覆盖它。但我只想在控制器端条件为true时执行此部分。。。我该怎么设置呢??