访问静态函数的当前实例模型属性

时间:2013-04-05 05:07:50

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2

我有两个模型: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模型中调用此方法。但是无论如何我尝试将变量从User传递给API我得到一个错误,即register_characters方法没有得到apiid or vcode,这就是我启动rails服务器的时候。

在我的用户模型中,我致电:after_create Api::register_characters(:apiid, :vcode, :id)其中:apiid:vcode:id是用户模型属性。

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

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

1 个答案:

答案 0 :(得分:1)

为了使流程更具可读性,我建议您定义一种调用所需方法的新方法。

after_create :register_characters_on_the_api

private

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

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