ruby-on-rails - 在回调中访问验证上下文

标签 ruby-on-rails activerecord

我正在重构一个旧的(笨重的)Rails 应用程序,我想知道是否可以在 validation callback 中访问 ActiveRecord context

当前代码看起来像

class Operation < ApplicationRecord
  attr_accessor :requires_update

  after_validation :update_status
  ...

  def update_status
   case status
   when 1
     ...
   when 10
    if requires_update
      status = 11
    end
  end
  ...
end
class OperationsController < ApplicationController
  def mark_as_complete
    ...
    if @operation.update(operation_params)
     ...
    else
      ...
    end
  end
  ...
end
<%= form_for @operation, url: mark_as_complete_operation_path(@operation) do |form| %>
  <%= hidden_field :operation, :requires_update, value: "1" %>
  ...
<% end %>

我想做的是:

1- 删除表单中的 hidden_​​field(这是表单发送到 Controller 的唯一值)。

2- 在特定上下文中保存操作

def mark_as_complete
    ...
    if @operation.save(context: :completed)
     ...
    else
      ...
    end
  end
  ...

3- 在 update_status 方法中访问上下文。

def update_status
  ...
   when 10
    if CONTEXT == :completed # What should go here?
      status = 11
    end
  end

有什么办法可以实现吗?

最佳答案

  if @operation.save(context: :completed)

在保存之前在 completed 上下文中验证 operation。这意味着您可以对该上下文调用验证。我没有找到任何文档说您可以按照您希望在 after_validation 回调中使用它的方式使用上下文。

关于ruby-on-rails - 在回调中访问验证上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67122503/

相关文章:

ruby-on-rails - Rails.cache.fetch 不缓存对象

ruby-on-rails - 如何在不保存的情况下从 ActiveRecord 对象中删除一些关联

mysql - ActiveRecord 按特定关系的值排序

validation - 如何使用 ActiveRecord 中的复合键验证模型?

php - codeigniter 事件记录不返回预期结果

ruby-on-rails - 将 ActiveRecord 属性标记为 html_safe

java - Android HTTPGet 到 Rails REST 登录

ruby-on-rails - API 的 URL 设计

ruby-on-rails - admin namespace 中的redirect_to对象

ruby-on-rails - 使用 api 和 carrierwave 上传文件