1

私は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に渡そうとすると、register_characters メソッドが取得されていないというエラーが表示されます。これは、Rails サーバーを起動したときです。 UserAPIapiid or vcode

私の User モデルでは、次のように呼び出します。after_create Api::register_characters(:apiid, :vcode, :id)where :apiid:vcodeおよび:idは User モデルのプロパティです。

ただし、起動しようとするとこのエラーが表示されるため、ユーザーモデルから呼び出されることなく、API のメソッドが呼び出されるとrails server想定しています。self.register_characters

とにかく、これを回避するにはどうすればよいですか? 私はそれを標準的な方法にするべきですか、それとも?

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 に答える