2013-04-05 41 views
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過濾器。然而無論如何,我嘗試將User的變量傳遞給API,我得到一個錯誤,那就是register_characters方法沒有得到apiid or vcode,這是我啓動我的rails服務器時的錯誤。

在我的用戶模型中,我打電話給:after_create Api::register_characters(:apiid, :vcode, :id)其中:apiid,:vcode:id是用戶模型屬性。

但是:由於出現這個錯誤,當我嘗試啓動我rails server我假設方法self.register_characters在API調用它自身沒有從用戶模式被調用。

無論如何,我該如何解決這個問題?我應該把它作爲一種標準方法還是?

回答

1

爲了使流程更具可讀性,我建議您定義一個調用所需方法的新方法。

after_create :register_characters_on_the_api 

private 

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

您還需要在參數前面刪除冒號,以便它將使用實例的屬性。例如,傳遞:apiid只傳遞一個符號而不是實例的apiid。