2013-05-27 40 views
1

我试图在我的实现中'MonkeyPatch'this控制器,以便它可以处理第三个参数('productname')。未找到Rails MonkeyPatch更改

在宝石原激活方法读取

def activate 
    if Digest::MD5.hexdigest(params["security_data"] + SaasySimple.config.secret) == params["security_hash"] 
    SaasySimple.config.model.activate(params['token'], params['id']) 
    end 
end 

我的整个新的文件,放置在LIB /猴/ sassysimple.rb,读取

module SaasySimple 
    class SubscriptionsController < ApplicationController 
    def activate 
     if Digest::MD5.hexdigest(params["security_data"] + SaasySimple.config.secret) == params["security_hash"] 
     SaasySimple.config.model.activate(params['token'], params['id'], params['productname']) 
     end 
    end 
    end 
end 

这不是工作 - 我m仍然得到了subscriptions#activate (ArgumentError) "wrong number of arguments (2 for 3)"的错误,我相信这是由于我的用户方法(见下文)期望productname,但没有从un-monkeypatched版本中获得。有人可以告诉我为什么把文件放在lib中不起作用吗?谢谢!

这是用户的方法:

def self.activate(token, id, productname) 
    user = User.find(id) 
    user.token = token 
    user.status = 'active' 
    user.package = productname 
    user.save! 
    end 

回答

0

我把猴补丁在配置/初始化/ sassysimple.rb

+0

我也试过这个...无济于事我害怕。 – Nick

+0

然后尝试创建一个新的控制器,用您的方法扩展SaasySimple :: SubscriptionsController – wrdevos

+0

此外,不确定是否扩展ApplicationController在猴子补丁中工作,这是不必要的 – wrdevos

0
  • 您是否已经验证控制器真的看到所有三个PARAMS?
  • User#activate在代码的其他地方调用吗?例如grep的。
+0

不,用户#激活仅由SaasySimple调用。我将如何验证第一个问题?我可以看到它们是通过SaaSy发布的Post请求发送的,然后由SubscriptionsController处理并发送到用户模型(在这种情况下不是)。 – Nick