1

我有两个模型:User & API,在我的 API 模型中,我有一个静态函数

  # Register account associated characters
  public
  def self.register_characters(apiid, vcode, userid)

    # Fetch XML
    api = EAAL::API.new("#{apiid}", "#{vcode}", "account")
    result = api.Characters

    # Pull characters
    result.characters.each do |char|

      if Character.find_by_charid(char.characterID.to_i).nil?

        character = Character.new(
          :charid  =>  char.characterID.to_i,
          :user_id =>  userid,
          :name    =>  char.name,
          :corp    =>  char.corporationName
        )

        character.save

        api = Api.new(
          :user_id      =>  userid,
          :character_id =>  character.id,
          :apiid        =>  apiid,
          :vcode        =>  vcode
        )
        api.save

        character.update_character
      end
    end

  end

我需要在我的User模型中的after_create过滤器上调用此方法。但是无论如何,我尝试将变量传递UserAPI我得到一个错误,即 register_characters 方法没有得到apiid or vcode,这是我启动我的 rails 服务器的时候。

在我的用户模型中,我调用:whereafter_create Api::register_characters(:apiid, :vcode, :id)和是用户模型属性。 :apiid:vcode:id

但是:由于当我尝试启动时出现此错误,我rails server假设self.register_charactersAPI 中的方法是在其自身上调用的,而不是从用户模型中调用的。

无论如何我该如何解决这个问题?我应该将其作为标准方法还是?

4

1 回答 1

1

为了使流程更具可读性,我建议您定义一个新方法来调用您想要的方法。

after_create :register_characters_on_the_api

private

def register_characters_on_the_api
  Api.register_characters(apiid, vcode, id)
end

您还需要删除参数之前的冒号,以便它使用实例的属性。:apiid例如,传递只是传递一个符号而不是实例的 apiid 。

于 2013-04-05T05:43:31.060 回答