2016-02-09 16 views
0

我有一个控制器,它是我如何在rails的rake文件中使用控制器方法?

confbridges_controller.rb 

其中有

def confbridge_status 

    conditions = Hash.new 
    if params[:cid] 
     conditions[:cid] = params[:cid] 
    end 

    confbridge = Confbridge.new 
    confbridge.confbridge_status(params) 
    @confbridges = Confbridge.find_by_sql(["SELECT c.id, c.confno, c.max_member, (c.max_member - 5) AS additional, (c.max_member - IFNULL(p.active,0)) AS vacant FROM confbridges c LEFT JOIN (SELECT confbridge_id, COUNT(uid) AS active FROM confbridge_participants WHERE active = 1 GROUP BY confbridge_id) AS p ON c.id = p.confbridge_id WHERE cid = ? ORDER BY vacant DESC", conditions[:cid]]) 
    respond_to do |format| 
     format.html { render :html => @confbridges } 
     format.text { render :text => @confbridges.pluck(:id).first } 
     format.json { render :json => @confbridges } 
    end 
    end 

的方法我怎么能叫的confbridge_status方法在我耙文件

这是我的代码我耙文件

circlenum = args[:circle] 
circle = Circle.find_by circle_number: circlenum 
if circle.present? 
    confbridges = Confbridge.new 
    confbridges.confbridge_status(args[:circle]) 
end 

谢谢:)

+0

在这里检查http://stackoverflow.com/questions/22936245/call-controller-from-rake-task – LHH

回答

0

答案很简单,你不知道。 Rails控制器的公共api是由HTTP请求调用的方法。

是可以实例化控制器或添加类方法来你的控制器,你调用外部,但其因为它是一个快速的方法一个非常糟糕的主意,把你的控制器变成垃圾抽屉。

相反,你应该将你希望你的控制器和rake任务之间分享到模型层或服务对象的代码。

但也有有效的情况下,您会希望通过HTTP在rake任务来调用你的控制器 - 例如保持赛道入睡或想从你的控制器的响应。您将使用Net::HTTP或任何其他HTTP库。

相关问题