1
71
此解决方案仅适用于Rails 2。 我刚调查过这个问题,我想我有个解决办法。您可以使用两种ActiveRecord私有方法:
您必须使用send来调用这些方法。实例:
这绝对是您真正想要在控制台中使用的东西,或者在进行一些随机测试时使用的东西。希望这有帮助! |
2
215
使用
http://api.rubyonrails.org/classes/ActiveRecord/Persistence.html#method-i-update_column #2:跳过在创建对象时也有效的回调
|
3
27
更新: @Vikrant Chaudhary的解决方案似乎更好:
我的原始答案: 看到这个链接: How to skip ActiveRecord callbacks? 在铁路3中, 假设我们有一个类定义:
方法1
方法2: 如果您想在rspec文件或其他文件中跳过它们,请尝试以下操作:
注意:完成后,如果您不在rspec环境中,则应重置回调:
在轨道3.0.5上对我来说很好 |
4
19
轨道3:
|
5
15
您可以在您的个人模型中尝试类似的操作:
编辑: 节后不是一个符号,但这至少是我第1000次尝试使它成为一个符号。 |
6
15
如果目标是简单地插入一个不带回调或验证的记录,并且您希望这样做而不使用其他gems、添加条件检查、使用原始SQL或以任何方式使用现有代码,请考虑使用指向现有DB表的“影子对象”。就像这样:
这适用于Rails的每个版本,是线程安全的,并且完全消除了所有验证和回调,而不修改现有代码。您可以在实际导入之前将该类声明直接放入,这样就可以很好地执行了。只需记住使用新类插入对象,例如:
|
7
9
你可以使用
|
8
5
防止所有“保存”回调的唯一方法是让第一个回调返回false。 也许你可以尝试一下(未经测试的):
|
9
5
在Rails 2.3中,处理这个问题的一种方法是使用update-all,它是根据 section 12 of the Rails Guide to validations and callbacks . 另外,请注意,如果您在after_u回调中执行某项操作,该操作将根据多个关联进行计算(即,a有多个关联,其中您也接受了嵌套的属性),则需要重新加载关联,以防作为保存的一部分,它的一个成员被删除。 |
10
4
https://gist.github.com/576546 只需将这个monkey补丁转储到config/initializers/skip_callbacks.rb 然后
诸如此类。 全部归功于作者 |
11
3
最多的
你只需要一个简单的
|
12
2
不使用gem或plugin就可以跨所有版本的Rails工作的解决方案是直接发出update语句。如
根据更新的复杂程度,这可能是一个选项(也可能不是)。这对于更新记录中的标志(例如 在内部 保存后回调(不重新触发回调)。 |
13
1
|
14
1
这些都没有指向
http://github.com/cjbottaro/without_callbacks 适用于Rails 2.x |
15
1
我写了一个插件,在Rails 3中实现了不带回调的更新: http://github.com/dball/skip_activerecord_callbacks 我认为,正确的解决方案是重写模型以避免回调,但如果这在短期内不可行,这个插件可能会有所帮助。 |
16
1
如果您使用的是Rails 2。可以使用SQL查询更新列,而不运行回调和验证。
我认为它应该适用于任何Rails版本。 |
17
1
当我需要对回调进行完全控制时,我会创建另一个用作开关的属性。简单有效: 模型:
测试:
|
18
1
要在Rails中创建测试数据,您可以使用以下方法:
|
19
1
你可以使用鬼鬼祟祟的拯救宝石: https://rubygems.org/gems/sneaky-save . 注意,如果没有验证,这对保存关联没有帮助。它抛出错误“created_at cannot be null”,因为它直接插入与模型不同的SQL查询。为了实现这一点,我们需要更新数据库中所有自动生成的列。 |
20
1
我需要一个针对Rails 4的解决方案,所以我想到了: app/models/concerns/save_without_callbacks.rb
在任何模型中:
然后你可以:
或
|
21
0
为什么您希望在开发中能够做到这一点?当然,这意味着您正在使用无效数据构建应用程序,因此,它的行为将异常,而不是您在生产中所期望的那样。 如果你想用数据填充你的开发数据库,一个更好的方法是建立一个rake任务,使用faker gem来构建有效的数据并将其导入数据库,创建尽可能多或很少的记录,但是如果你执意于它,并且有一个很好的理由,我猜在没有回调的情况下更新和在没有回调的情况下创建都可以,B但是,当你试图将铁轨弯曲到你的意愿时,问问你自己你有一个很好的理由,并且你所做的是否真的是一个好主意。 |
22
0
一种选择是使用同一个表为此类操作创建单独的模型:
(同样的方法可能使绕过验证变得更容易) 斯蒂芬 |
23
0
另一种方法是使用验证钩子而不是回调。例如:
这样,您可以在默认情况下获得“做某件事”,但您可以轻松地用以下方法覆盖它:
|
24
0
应该与所有版本的
TLDR:在同一个表上使用“不同的ActiveRecord模型” |
25
-3
不是最干净的方法,但可以在检查Rails环境的条件下包装回调代码。
|
Stilian · 存储库设置中没有Github页面部分 2 年前 |
Kellen · 查看$卷展栏功能列表 2 年前 |
Akshit Thakur Ak · 我怎样才能把铁轨停下来? 2 年前 |
johncssjs · 将数组转换为每个元素的嵌套哈希 2 年前 |
solidsnake99 · Rails db:如何绕过验证 2 年前 |