Ruby on rails 在保存之前动态地将方法设置为on

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,则我希望设置自定义回调,该回调将在保存前但在保存对象之前精确调用 我想

在我的控制器中,我想动态地将我的实例方法绑定到save回调之前

有什么方法可以动态地将方法绑定到来自控制器端的回调

编辑: 控制器

这是原始代码

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时执行此部分。。。我该怎么设置呢??