Eri*_*han 13 exception-handling ruby-on-rails parent
在处理父键被销毁的对象时,有人能告诉我这两种方式的区别吗?有什么实际的理由让你从另一个中选择一个?
Moh*_*waz 12
restrict_with_exception如果有任何关联记录,则会引发异常:
class Student< ActiveRecord::Base
has_many :courses, dependent: :restrict_with_exception
has_many :books
end
Run Code Online (Sandbox Code Playgroud)
restrict_with_error如果有任何关联记录,则会向所有者(您尝试删除的记录)添加错误:
class Foo < ActiveRecord::Base
has_many :bars, dependent: :restrict_with_error
end
Run Code Online (Sandbox Code Playgroud)
预期的行为
对于标准验证,错误消息包含翻译,错误详细信息包含密钥,此处显示空白错误:
f1 = Foo.new
f1.save!
#=> ActiveRecord::RecordInvalid: Validation failed: Name can't be blank
f1.errors
#=> #<ActiveModel::Errors:0x007fb666637af8
#=> @base=#<Foo:0x007fb6666ddbb0 id: nil, name: nil>,
#=> @details={:name=>[{:error=>:blank}], :type=>[{:error=>:blank}]},
#=> @messages={:name=>["can't be blank"], :type=>["can't be blank"]}>
Run Code Online (Sandbox Code Playgroud)
这些是依赖选项
\n\n什么是从属选项?
\n\ndependent 选项是一个选项,用于决定在删除父记录时(如果 Rails 模型有子记录)如何处理子记录。
\n\n限制与例外
\n\n:restrict_with_exception\xe2\x80\x93 如果有任何关联记录,则会引发异常。
:restrict_with_exception- 如果有子记录,那么你ActiveRecord::DeleteRestrictionError就会遇到。
限制错误
\n\n:restrict_with_error\xe2\x80\x93 如果有任何关联记录,则会向所有者(您尝试删除的记录)添加错误。
:restrict_with_error- 如果有子记录,则无法删除,错误信息会添加到父记录中。
除了这些之外的几个选项
\n\n:destroy- 删除与父母的孩子记录。
:delete_all- 删除与父母的孩子记录。但由于直接删除了DB的记录,因此并没有执行子记录的回调处理。
:nullify NULL- 更新子记录的外键。
你也可以google一下了解更多
\n| 归档时间: |
|
| 查看次数: |
3869 次 |
| 最近记录: |