- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有两个型号:Person
和 Address
我想在交易中创建。也就是说,我想尝试创建 Person
如果成功,则创建相关的 Address
.我想使用 save
语义(返回 true
或 false
)而不是 save!
语义(是否引发 ActiveRecord::StatementInvalid
)。
这不起作用,因为 user.save
不会触发事务回滚:
class Person
def save_with_address(address_options = {})
transaction do
self.save
address = Address.build(address_options)
address.person = self
address.save
end
end
end
(将 self.save
调用更改为 if self.save
block 周围的其余部分没有帮助,因为即使 Person
失败,Address
保存仍然成功。)
这不起作用,因为它引发了 ActiveRecord::StatementInvalid
transaction
之外的异常阻止而不触发 ActiveRecord::Rollback
:
class Person
def save_with_address(address_options = {})
transaction do
save!
address = Address.build(address_options)
address.person = self
address.save!
end
end
end
Rails documentation特别警告不要捕获 ActiveRecord::StatementInvalid
在transaction
里面 block 。
我想我的第一个问题是:为什么这个交易 block 不...在两个保存上交易?
最佳答案
这个怎么样?
class Person
def save_with_address(address_options = {})
tx_error = false
transaction do
begin
self.save!
address = Address.build(address_options)
address.person = self
address.save!
rescue Exception => e
# add relevant error message to self using errors.add_to_base
raise ActiveRecord::Rollback
tx_error = true
end
end
return true unless tx_error
# now roll back the Person TX.
raise ActiveRecord::Rollback
return false
end
end
我不喜欢 TX 的实现方式。但这是解决问题的方法。
关于ruby-on-rails - 如何在 ActiveRecord 事务中获得保存(无感叹号)语义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2481806/
在查看 tslint 规则的源代码时,我发现了以下语句: if (node.parent!.kind === ts.SyntaxKind.ObjectLiteralExpression) {
在查看 tslint 规则的源代码时,我发现了以下语句: if (node.parent!.kind === ts.SyntaxKind.ObjectLiteralExpression) {
我正在处理这个项目,并试图弄清楚前后的感叹号是什么意思。 import ICHING from '!json!constants/iching_deoxy.json'; 最佳答案 这是一个 inlin
我正在输入的内容: INSERT INTO reviews VALUES ('', title='dragon ball z', date='2012-12-01 23:06:03', usernam
在github的jade文档中,谈到了缓冲技术: 为了安全起见,默认情况下会对 = 缓冲的代码进行转义,但是要输出未转义的返回值,您可以使用 !=: p!= aVarContainingMoreHTM
我有两个变量用于包含或排除系统文件(使用最小匹配 glob 语法,其中 ! 代表排除)。 var systemFiles = ['node_modules/**/*', '.git/**/*']; v
我正在尝试切换键“1”和“!”使用 Karabiner,但我无法在任何地方找到感叹号的关键代码。不可能吗? 最佳答案 据我所知,! 没有唯一的键码。相反,它仅在系统接收到 Shift_R + 1 时输
在 Windows 7 上,文件夹搜索框中使用的以下查询无法过滤文件夹中带有“!”的文件。其中感叹号。 filename:! 请问有什么办法可以做这个搜索吗?谢谢。 最佳答案 在您的具体示例中 fil
我有一个带有CENTOS 6.4和WHM 11.38.2。的VPS。我刚刚将WHM更新为最新版本,现在当我转到phpMyAdmin时,在表名旁边和“查询”选项卡中“查询”一词之前,有一个带有白色感叹号
例如: http://localhost/#!/login.html 我不需要“!”。我将如何删除它? eg:http://localhost/#/login.html 这是我的路由器代码: //
https://stackoverflow.com/a/2787560/645703说: ($!) is strict function application. That is, it evalua
我已经看到它现在使用过一两次,其中 ! 标记放在属性名称之前。例如: !overflow: hidden; (还有,see here) 谁能阐明它的目的是什么? 最佳答案 我找不到任何关于它的信息,但
我已经看到它现在使用过一两次,其中 ! 标记放在属性名称之前。例如: !overflow: hidden; (还有,see here) 谁能阐明它的目的是什么? 最佳答案 我找不到任何关于它的信息,但
该程序的目标是获取用户输入并将其转换为 ascii 文本。 代码按其应有的方式工作,但不包含逗号、句点、感叹号或问号。 我尝试将:!、?、' 和逗号作为单独的列表包含在内,并尝试在输入中调用它。但我并
我有州列表,我已经添加了州名搜索过滤器。我有这样的数组: stateList : [{name: 'abc', area:500},{name: '!def', area:500}] 我有 与 ng-
让我们从正常行为开始。当我执行 Read-Host没有提示,我可以输入一个以感叹号开头的字符串: PS C:\> Read-Host | Foreach-Object { Write-Host 'En
我只是拼错了命令 git status 和 !git status 控制台显示它开始将最后克隆的存储库克隆到文件夹状态... 我的问题是,这个命令是什么意思,它有什么用途吗? 最佳答案 在 bash
这个问题在这里已经有了答案: What does an exclamation mark mean after the name of a function? (1 个回答) 关闭 2 年前。 Ju
我一直在 Magnolia code examples 中的 FreeMarker 代码末尾看到感叹号.例如: ${content.header!} 感叹号叫什么,它有什么作用? 最佳答案 感叹号称为
我环顾四周,找不到任何东西可以让我的脚本正确使用特殊字符(例如 ! 或 ; 或 ^) 在文件路径或文件名中。 我的脚本确实有效,但前提是上述字符不在任何扫描的文件夹或文件名中。如果任何文件夹或文件具有
我是一名优秀的程序员,十分优秀!