【问题标题】:Check if there's dependency before_destroy rails admin ruby检查是否存在依赖 before_destroy rails admin ruby
【发布时间】:2017-05-11 02:22:04
【问题描述】:

我目前正在做一个项目,在我们的项目中有 2 个表/类 ActivityType 和 Activity。同样在这个项目中,我们使用了一个名为 rails admin 的 gem。如果活动中使用了活动类型,则管理员无法删除活动类型。

活动

class Activity < ApplicationRecord
  belongs_to :activity_type
end

活动类型

class ActivityType < ApplicationRecord
  has_many :activities
before_destroy :ensure_has_no_activity_type

  private

  def ensure_has_no_activity_type
      unless activities.count == 0
       errors[:base] << "cannot delete activity type that has activity"
       return false
    end
  end
end

问题:如何查看是否有孩子在活动?我的代码有问题吗?

【问题讨论】:

  • 报错了吗?
  • 不返回任何错误但会继续删除。
  • 尝试用activities.present?替换除非块
  • 所以我将删除除非activity.count == 0,然后使其成为activity.present?如果是,它会继续删除:(
  • 对不起,我的意思是其他方式..检查答案..顺便说一下哪个轨道版本?

标签: ruby-on-rails ruby rails-admin


【解决方案1】:

这就是我的意思

def ensure_has_no_activity_type
  if activities.present?
    errors.add(:base, 'Cannot delete activity type that has activity')
    throw(:abort)
  end
end

【讨论】:

  • 它不起作用,如果我错了,请纠正我.. :base 是模型的名称对吗?我也尝试使用errors.add(:base, 'message: Cannot delete activity type that has activity')
  • 去掉引号,消息是关键:.errors.add(:base, message: 'Cannot delete activity type that has activity')api.rubyonrails.org/classes/ActiveModel/Errors.html
  • 我也试过 errors.add(:base, message: "Cannot delete activity type that has activity") 没有改变..我也重启了我的服务器
  • 没有改变是什么意思?
  • 如果您希望您的 Rails 管理员显示该消息,这是一条需要覆盖的 Flash 消息,这似乎是完全不同的问题。通过上述方法,您将收到object.errors.message的消息。
猜你喜欢
  • 2015-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-02
相关资源
最近更新 更多