相关疑难解决方法(0)

如何跳过ActiveRecord回调?

可能重复:
如何避免运行ActiveRecord回调?

我有这样的模特

class Vote < ActiveRecord::Base  
    after_save :add_points_to_user

    .....
end
Run Code Online (Sandbox Code Playgroud)

是否有可能以某种方式迫使模型add_points_to_user在保存时跳过呼叫?可能像ActiveRecord#deletevs ActiveRecord#destroy

ruby-on-rails rails-activerecord

76
推荐指数
4
解决办法
8万
查看次数

使用after_save回调修改同一个对象而不再触发回调(递归)

如果我将一个after_save回调添加到ActiveRecord模型,并且在该回调上我使用update_attribute来更改对象,则再次调用回调,因此发生"堆栈溢出"(hehe,无法抗拒).

是否可以避免这种行为,可能在执行期间禁用回调?或者还有另一种方法吗?

谢谢!

ruby-on-rails

27
推荐指数
5
解决办法
1万
查看次数

跳过回调和验证

有没有办法通过在Rails 3中的这些行做一些事情来跳过回调和验证?

Object.save(:validate => false, :skip_callbacks => true)
Run Code Online (Sandbox Code Playgroud)

谢谢!

ruby-on-rails ruby-on-rails-3

13
推荐指数
2
解决办法
2万
查看次数

Rails 4:跳过回调

我的应用程序中有拍卖和出价对象,当有人按下BID BUTTON然后调用创建出价的BID CREATE控制器,然后在拍卖对象上做一些其他事情:

BIDS控制器 - >创建

@auction.endtime += @auction.auctiontimer
@auction.winner = @auction.arewinning 
@auction.save
Run Code Online (Sandbox Code Playgroud)

拍卖模型

before_update :set_endtime

def set_endtime
   self.endtime=self.starttime+self.auctiontimer
end
Run Code Online (Sandbox Code Playgroud)

所以问题是:在这个特定的@ auction.save中,C如何才能跳过"回调前"

ruby ruby-on-rails callback

8
推荐指数
2
解决办法
2万
查看次数

保存active_record而不调用rails3中的回调

可能重复:
如何避免运行ActiveRecord回调?

在rails 2中,active_records上有一个名为create_without_callbacks的私有方法,您可以调用该方法将记录保存到数据库中,而不会触发与该对象关联的回调.这种方法在rails 3中已经消失了,有什么方法可以实现同样的东西?

activerecord ruby-on-rails callback ruby-on-rails-3

7
推荐指数
1
解决办法
6967
查看次数

如何在运行时禁用Rails关联counter_cache

我正在批量导入记录,并且不希望每次都更新计数器.我想在批量upsert期间跳过counter_cache sql更新,然后在循环结束时调用reset_counters.

我试过了:

my_model = MyModel.find_or_initialize_by_slug row[:slug]
my_model.association(:my_association).reflection.options[:counter_cache] = false
my_model.attributes = {:name => "Christopher"}
my_model.save!
Run Code Online (Sandbox Code Playgroud)

但我可以在sql输出中看到它仍在更新counter_cache.

注意:我不能使用activerecord-import,因为我想执行upserts并且我正在使用postgresql

postgresql activerecord ruby-on-rails

6
推荐指数
1
解决办法
1649
查看次数

保存后何时更新记录?

我正在使用回形针将文件附加到我的模型中.我想要做的是,在保存模型并将文件写入磁盘后,我需要更新模型中关于文件的另一个属性(CRC).由于回形针在调用.save之后才将文件写入磁盘,我首先想到的是使用after_save回调.当我这样做时,我得到一个"SystemStackError(堆栈级别太深):"错误.然后我尝试做一个after_commit回调,似乎工作得更好一点.例如,如果我只是给我的crc分配:

self.crc = "TEST"
self.save
Run Code Online (Sandbox Code Playgroud)

这有效.但是,如果我尝试做我的真实作业,请使用:

self.crc = "0x" + IO.read(self.patchfile.path, 4, 0x20).unpack("H8").join
self.save
Run Code Online (Sandbox Code Playgroud)

WEBrick中止:

/usr/local/rvm/rubies/ruby-1.9.2-p290/lib/libruby.so.1.9(+0x180048) [0x290048]
/usr/local/rvm/rubies/ruby-1.9.2-p290/lib/libruby.so.1.9(rb_yield+0x56) [0x294c46]

[NOTE]
You may have encountered a bug in the Ruby interpreter or extension libraries.
Bug reports are welcome.
For details: http://www.ruby-lang.org/bugreport.html

Aborted
Run Code Online (Sandbox Code Playgroud)

所以我在想我做错了......

ruby-on-rails paperclip

1
推荐指数
1
解决办法
2002
查看次数