Rails引入了这种*
语法,但现在我如何获得有意义的销毁错误?
对于验证错误,可以做
throw(:abort)
这是我的模特
if not user.save
# => user.errors has information
if not user.destroy
# => user.errors is empty
答案 0 :(得分:17)
您可以使用SELECT * FROM ...
作为课程方法。
用户模型:
SELECT
用户控制器:
errors.add
答案 1 :(得分:3)
Gonzalo S answer完全没问题。如果你想要更清洁的代码,你可以考虑一个帮助方法。以下代码在Rails 5.0或更高版本中效果最佳,因为您可以使用ApplicationRecord
模型。
class ApplicationRecord < ActiveRecord::Base
self.abstract_class = true
private
def halt(tag: :abort, attr: :base, msg: nil)
errors.add(attr, msg) if msg
throw(tag)
end
end
现在你可以做到:
class User < ApplicationRecord
before_destroy(if: :condition) { halt msg: 'Your message.' }
# or if you have some longer condition:
before_destroy if: -> { condition1 && condition2 && condition3 } do
halt msg: 'Your message.'
end
# or more in lines with your example:
before_destroy :destroy_validation, if: :some_reason
private
def destroy_validation
halt msg: 'Your message.' if some_condition
end
end