【发布时间】:2021-04-16 09:20:16
【问题描述】:
我正在重构一个旧的(和大量的)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(这是表单发布到控制器的唯一值)。
2- 在特定上下文中保存operation。
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
有没有办法做到这一点?
【问题讨论】:
标签: ruby-on-rails activerecord