Ruby on rails Rails如何先渲染,然后调用方法?
我的控制器中有以下操作:Ruby on rails Rails如何先渲染,然后调用方法?,ruby-on-rails,ruby-on-rails-3.2,Ruby On Rails,Ruby On Rails 3.2,我的控制器中有以下操作: def ad @koder = @side.reklamers.pluck(:id) - [session[:log]] @reklame = Reklamer.find(@koder.sample) session[:log] = @reklame.id render :text => "<span class='bannerid' data-id='#{@reklame.id}'></span><
def ad
@koder = @side.reklamers.pluck(:id) - [session[:log]]
@reklame = Reklamer.find(@koder.sample)
session[:log] = @reklame.id
render :text => "<span class='bannerid' data-id='#{@reklame.id}'></span><p style='margin-bottom: 7px;margin-top: 7px;font-size: 9px;text-align: center !important;'>Ad</p>#{@reklame.kode}"
end
def-ad
@koder=@side.reklamers.pulk(:id)-[session[:log]]
@reklame=Reklamer.find(@koder.sample)
会话[:log]=@reklame.id
render:text=>“Ad
{@reklame.kode}”
结束
它呈现一个HTML广告。这段代码非常快。问题是当我尝试查看示例计数时,响应变得非常慢。3秒。与200毫秒相比
@koder = @side.reklamers.pluck(:id) - [session[:log]]
@reklame = Reklamer.find(@koder.sample)
session[:log] = @reklame.id
@reklame.views += 1
@reklame.save
render :text => "<span class='bannerid' data-id='#{@reklame.id}'></span><p style='margin-bottom: 7px;margin-top: 7px;font-size: 9px;text-align: center !important;'>Ad</p>#{@reklame.kode}"
@koder=@side.reklamers.pull(:id)-[session[:log]]
@reklame=Reklamer.find(@koder.sample)
会话[:log]=@reklame.id
@reklame.views+=1
@雷克勒姆,救命
render:text=>“Ad
{@reklame.kode}”
我尝试添加了一个具有相同结果的背景工作
我该怎么办?既然
视图实际上是一个计数器,也许你应该看看:
你的情况应该是这样的
Reklamer.increment_counter(:views, @reklame.id)
它应该只更新视图列,不运行验证、回调等,这将使它更快。但另一方面,“简单保存”上的3s表示还有其他问题。首先,尝试:
@reklame.update_attribute :views, @reklame.views + 1
看看这是否有帮助。如果是这样的话,那么您将进行一些代价高昂的数据验证,这会使您的速度减慢,但至少您知道问题的根源
如果这不起作用,试着用
Thread.new { //code }
如果保存速度仍然很慢,那么可能是数据库的设置方式或类似的问题 也许你应该提供你尝试使用后台工作解决方案的代码。我只是尝试调用我已经存在的一个后台工作,它将响应速度减慢了2,8秒。