Tag: 回调

真正的sinatra(ruby / rack)after_filter的最快方法是什么?

好的,这是一项简单的任务。 在我将html渲染到客户端后,我想用请求中的信息执行db调用。 我正在使用sinatra,因为它是一个轻量级的微框架,但是如果它更快/更容易(Rack?),我真的想用ruby做任何东西。 我只想获取url并根据url将客户端重定向到其他位置。 那么如何使用rack / sinatra进行真正的after_filter。 而after_filter我的意思是在响应发送给客户端之后。 或者,如果没有线程,这是不可行的? 我分叉sinatra并在filter之后添加,但是没有办法刷新响应,即使是send_data,假设流文件(显然是二进制文件)等待after_filters。 我已经看到了这个问题: 多部分响应在ruby中,但答案是针对rails。 我不确定它是否真的刷新了对客户端的响应,然后允许后续处理。 Rack :: Callbacks有一些回调之前和之后,但即便看起来它们会在响应被发送到客户端之前运行这里的Rack :: Callbacks实现(添加注释): def call(env) @before.each {|c| c.call(env) } response = @app.call(env) @after.each {|c| c.call(env) } response #i am guessing when this method returns then the response is sent to the client. end 所以我知道我可以用rake通过shell调用后台任务。 但是没有太多也是好的…还有NeverBlock但是对于执行一个单独的进程而不延迟响应是好的还是它仍然会使应用程序等待整体(我认为它会)? 我知道这很多,但简而言之,简单的after_filter在ruby / sinatra / rack中发送响应之后真正运行。 […]

RAILS:如何在回调中创建新的collection.build?

如何使用其他模型在after_save中创建新记录? 我试过这一行导致“未定义的方法`期刊’为nil:NilClass” 例如 resources :users do resource :profile resources :journals end class User < ActiveRecord::Base has_one :profile has_many :journals end class Profile < ActiveRecord::Base belongs_to :user after_save :create_new_journal_if_none private def create_new_journal_if_none if user.journals.empty? ???? user.journals.build() ???? end end end class Journals < ActiveRecord::Base belong_to :user end

Ruby on Rails,ActiveRecord回调,延迟执行

是否有回调,在使用create-method 10分钟后调用方法? 示例:上传图片,调用create方法,在10分钟内应调用另一个方法。 提前致谢

在回调Rails 3中更新属性

继这个问题之后 ,我花了一天时间尝试将累计运行销售总额添加到我的销售表中。 这对我来说有点棘手(因为我想要),因为我希望isbn_id相同的销售总额,并且在该集合中,记录channel_id相同的位置 – 按invoice_date排名。 这就是我可以计算特定销售单位范围内的特许权使用费。 这是我的非工作回调代码,在Sale模型中: before_save :runningtotal private def runningtotal @sale = Sale.order(“invoice_date ASC”) @lastbal = @sale.find_all_by_isbn_id(@isbn).group_by(&:channel) #that sucessfully gets all sales ranked by date ascending, then groups them by channel, just for the current isbn. @lastbal.each do |channel, sale| sale.each_with_index do |sale, i| previous_sale = sale[i-1] unless i==0 next unless previous_sale @total_quantity […]

在HABTM关系中的连接表中是否调用了ActiveRecord回调?

在测试acts_as_audited时 ,我发现(如此处所述):with_associations标志不会为HABTM关系生成审计表条目。 例如: User < ActiveRecord::Base has_and_belongs_to_many: :groups acts_as_audited, with_associations: groups Group < ActiveRecord::Base has_and_belongs_to_many: :users acts_as_audited, with_associations: users (和测试的变化,即有/无with_associations) 在源代码中,可以看到所有acts_as_audited都会在审计表中添加像before_update和after_create这样的回调。 显然这些不会添加到连接表中。 我尝试制作如下模型: GroupsUsers < ActiveRecord::Base acts_as_audited after_save: :test def test logger.debug "test" end 但没有看到对用户或组的CRUD操作的审计表的任何添加。 我可以在日志中看到作用于连接表的SQL语句,因此这表明连接表在内部被更改,以便绕过正常的回调。 这是真的? 获取acts_as_audited以通知连接表或记录HABTM关联的任何建议?

计算运行总轨数3

在Rails中计算运行总计的最佳方法 – 或者实际上是什么方式 – 是什么? 我有一个模特,Sale。 它有一个数量列和一个sales_value列。 当表按isbn_id排序,然后是channel_id,然后是invoice_date时,我需要填充第三列,total_quantity,以及先前记录的数量值的总和。 这设置了各种合理的数据库管理警报响铃,所以我想知道它是否可能。 需要此累积金额的原因是对累计数量在特定范围内的销售额应用百分比。 我不能在所有记录中使用平均销售价值,因为销售利润率会随着时间的推移而发生显着变化 – 因此我会将平均值应用于可能超过或低于特许权使用费收入者的一堆销售额。 所以。 我应该在Sale模型上执行before_save回调,并以某种方式执行update_attribute吗? 当表以特定方式排序时,是否有一种方法可以返回上一条记录的值? 或者我应该将所有Sale记录转储到一个数组中,并且可能使用inject来累积运行总计? 任何想法最受欢迎,提前感谢。 更新: 此处询问后续问题。

after_update在哪里调用两次?

我的模型Projelement有这些回调: after_create { |p| p.log_activity “created” } after_update { |p| p.log_activity “updated” } 而Projelement.log_activity看起来像: # create new Activity object # point it to the project & projelement @a = Activity.new @a.projelement = self @a.project = self.project # record the type of activity case op_type when “created” @a.operation = “created” when “deleted” @a.operation = “deleted” when […]

对于嵌套的父/子模型,Rails会以什么顺序进行模型回调?

我知道保存模型的一般顺序是最深的孩子,然后逐渐到达父母。 但我对其他回调感到疑惑,是否会发生以下情况: ChildA – before validation ChildB – before validation Parent – before validation ChildA – after validation ChildB – after validation Parent – after validation ChildA – before save ChildB – before save Parent – before save … 或者沿着以下方向: ChildA – before validation ChildA – after validation ChildA – before save … ChildB – […]

轨。 保存时更新模型属性

认为这是一项简单的任务,但我对这个问题有点担心: 想要在模型保存时更新模型的其中一个属性,从而在模型中进行回调: after_save:calculate_and_save_budget_contingency def calculate_and_save_budget_contingency self.total_contingency = self.budget_contingency + self.risk_contingency self.save #=>这不起作用…. self.update_attribute:budget_contingency,(self.budget_accuracy * self.budget_estimate)/ 1 结束 并且网络服务器回显消息ActiveRecord::StatementInvalid (SystemStackError: stack level too deep: INSERT INTO “versions” 这基本上告诉我有一个infite循环保存到模型, after_save然后我们再次保存模型…进入另一个saving模型的循环 这个模型属性计算只是停留在这个时间点。 如果有人遇到过这个问题,并且有一个漂亮的俏皮/ rails解决方案,请在下面给我发一条消息,谢谢

Rails:如何访问新记录的嵌套关联的父模型?

假设我们有标准的Post&Comment模型,Post有accepts_nested_attributes_for :commments和:autosave => true set。 我们可以创建一个新post以及一些新评论,例如: @post = Post.new :subject => ‘foo’ @post.comments.build :text => ‘bar’ @post.comments.first # returns the new comment ‘bar’ @post.comments.first.post # returns nil 🙁 @post.save # saves both post and comments simultaneously, in a transaction etc @post.comments.first # returns the comment ‘bar’ @post.comments.first.post # returns the post ‘foo’ 但是,我需要能够在Comment(例如,来自其before_save或validation函数)之间进行区分 此评论未附加到post(无效) 此评论附加到未保存的post(有效) […]