![](/img/trans.png)
[英]RoR - `delete_at` like method in ActiveRecord::Associations
[英]RoR permit delete if no associations
如果没有关联,是否有办法允许删除记录?
例如,我们可以有rooms
和events
。 出于某种原因,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.