Rails:重命名类后没有方法错误

时间:2016-03-11 15:27:06

标签: ruby-on-rails ruby

我刚刚重命名了一个班级,现在我的应用程序打破了

NoMethodError in MailchimpController#campaigns 
undefined method `new' for MailchimpHelper:Module`

尝试实例化此类时。该类名为mailchimp_wrapper.rb,现在名为mailchimp_helper.rb。缩短版本看起来像这样,我显然将名称从MailchimpWrapper更改为MailchimpHelper

class MailchimpHelper

  def initialize
    @api_key = "jgkgkgkljg"
    @mc_user = "lkjlkjlkjlj"     
    @api_endpoint = 'https://us5.api.mailchimp.com/3.0/'
  end

  def get_campaigns
    campaigns
  end
end

MailchimpController看起来像这样:

class MailchimpController < ApplicationController

  def campaigns
    mailchimp = MailchimpHelper.new
    campaigns_hash = mailchimp.get_campaigns
    @campaigns = campaigns_hash["campaigns"]
  end
end

重命名课程时我还需要做些什么吗? 它在某种程度上似乎并不将MailchimpHelper视为一个类,而是将其视为错误消息所暗示的模块。但我不知道从哪里开始......

1 个答案:

答案 0 :(得分:1)

helper MailchimpHelper添加到MailchimpController类。

class MailchimpController < ApplicationController
  helper MailchimpHelper

  def campaigns
    mailchimp = MailchimpHelper.new
    campaigns_hash = mailchimp.get_campaigns
    @campaigns = campaigns_hash["campaigns"]
  end
end

编辑

或者,您可以尝试将MailchimpHelper课程更改为module

将其命名为mailchimp.rb

module Mailchimp
  # no need to an initialize with modules
  @api_key = "jgkgkgkljg"
  @mc_user = "lkjlkjlkjlj"     
  @api_endpoint = 'https://us5.api.mailchimp.com/3.0/'

  def get_campaigns
    campaigns
  end
end

然后,在MailchimpController中,您需要添加include Mailchimp。当你想调用模块方法时,你不需要实例化一个新类。所以你的示例控制器看起来像这样:

class MailchimpController < ApplicationController
  include Mailchimp

  def campaigns
    campaigns_hash = get_campaigns
    @campaigns = campaigns_hash["campaigns"]
  end
end