繁体   English   中英

如果没有关联,则RoR允许删除

[英]RoR permit delete if no associations

如果没有关联,是否有办法允许删除记录?

例如,我们可以有roomsevents 出于某种原因,RoomX不应再被使用,可以删除。

任务:用户无法删除@room直到validates: @room has no Events

room.rb:

class Room < ActiveRecord::Base
  has_many :events
  def to_s
    name
  end
end

event.rb:

class Event < ActiveRecord::Base
  belongs_to :room
end

你有什么想法/解决方案吗?

您可以使用before_destroy验证并检查是否仍然存在关联

class Room < ActiveRecord::Base

 before_destroy :check_for_associations

  def events?
    events.any?
  end

  private

  def check_for_associations
    if events?
      errors[:base] << "cannot delete : events are still planned"
      false
    end
  end
end

你还没有做太多的事情,但这是一个非常简单的实现,你可以在视图中使用:

if room.events.present?
  "You can't delete this"
else
 link_to room_path(@room), method: :delete
end

这将处理View层验证 - 但您还应该在模型中再次在Database层验证这一点。

在您的模型中,您可以查看添加before_destroy验证以进行与上面相同的检查。

before_destroy:check_whether_room_has_events

def check_whether_room_has_events
  return true if room.events.count == 0
  errors.add(:base, "Cannot delete room with events")
  return false
end

我相信这最后一点是正确的,但没有测试过。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM