我有两个模型: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
在其上被调用,而不是从用户调用模型。
无论如何我如何解决这个问题?我应该把它作为标准方法还是?
答案 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。