首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果在更新中存在特定列,则更新另一列

问如果在更新中存在特定列,则更新另一列
EN

Stack Overflow用户
提问于 2016-02-12 07:37:56
回答 3查看 82关注 0票数 0

我有一个模型,它有两个列admin_approved和approval_date。通过使用admin_approved管理更新activeadmin。我希望当管理更新本专栏approval_date也由current_time更新。

我无法理解我是如何使用this.Which call_back的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-02-12 09:33:53

代码语言:javascript
复制
#app/models/model.rb
class Model < ActiveRecord::Base
   before_update 'self.approval_date = Time.now', if: "admin_approved?"
 end 

这假设您的表中有admin_approved (bool)和approval_date (datetime)。

它的工作方式是对使用字符串进行评估,以便在更新之前评估admin_approved属性是否为"true“。如果是,则将approval_date设置为当前时间。

票数 1
EN

Stack Overflow用户

发布于 2016-02-12 07:43:17

在模型中使用after_save回调。

会是这样的:

代码语言:javascript
复制
after_save do
  if admin_approved_changed?
    self.approval_date = Time.now
    save!
  end
end

或者你想怎么改变就怎么改变!

票数 1
EN

Stack Overflow用户

发布于 2016-02-12 08:06:57

您可以在保存模型实例之前设置approval_date。因此,您可以保存一个数据库写入进程,而不是使用after_save保存实例,在after_save回调中,您将再次保存它。

代码语言:javascript
复制
class MyModel < ActiveRecord::Base
  before_save :set_approval_date

  # ... your model code ...

  private

  def set_approval_date
    if admin_approved_changed?
      self.approval_date = Time.now
    end
  end
end

可能在您的控制器中:

代码语言:javascript
复制
my_instance = MyModel.find(params[:id])
my_instance.admin_approved = true
my_instance.save
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35357166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档