2016-05-14 7 views
0

小規模なプロジェクトでは、個々のプレーヤーの勝利率に応じて勝つためにリーグオブリージェンツでチームの確率を返すためにレールでアプリケーションを開発しようとしていました。私はRiot APIとやりとりしており、召喚者とチャンピオンとの勝利確率を返すことができます。私は、チームが入力したすべての選手の勝率(チャンピオン確率)を加算して平均を返す方法を考えました。RailsとRiot APIとの相互作用チームの確率の平均を返す

はここ

class Tteam < ActiveRecord::Base 
    require 'riotsecondapi' 
    before_save :downcase_players 

    before_save :mod_champ_save 


    def self.return_id(name) 
    api = RiotApi.new 
    info = api.get_summoner_id(name) 
    info[name]["id"] 
    end 

    def self.return_summoner_champion_list(summoner_name) 
    id = return_id(summoner_name) 
    api = RiotApi.new 
    full_stat = api.get_full_stats(id) 
    full_stat["champions"] 
    end 

    def self.get_champion_id(champ_name) 
    api = RiotApi.new 
    champs = api.get_champion 
    champs["data"][champ_name] 
    end 

    def self.determine_champion_probability(summoner_name, champ_name) 
    champion_ids = return_summoner_champion_list(summoner_name).collect{|player| player["id"]} 
    desired_champ_id = get_champion_id(champ_name) 
    winrate = 0.0 

    if champion_ids.include?(desired_champ_id) 
    hash = Hash[champion_ids.map.with_index.to_a] 
    champ_array_location = hash[desired_champ_id] 

player_stat = return_summoner_champion_list(summoner_name)[champ_array_location]["stats"] 
total_played = player_stat["totalSessionsPlayed"] 
total_won = player_stat["totalSessionsWon"] 
    winrate = (total_won.to_f/total_played.to_f) 
    winrate.round(2) * 100 
    else 
    winrate = 0.5 * 100 
    end 
    end 



def self.team_probability 
    team_winrate = determine_champion_probability(p1,c1) + determine_champion_probability(p2, c2), + determine_champion_probability(p3, c3) 
    team_winrate 
    end 

私の方法のteam_probabilityは「#のために未定義のローカル変数やメソッド `P1' 」エラーを返す続けます(私は方法を構築しようとしています)私のTteamモデルです。だから私は、これらの変数を使用することはここではうまくいかないと推測しています。ここで

は私の私のTteamコントローラ

class TteamsController < ApplicationController 
    def index 
    end 

    def show 
    @tteam = Tteam.find(params[:id]) 
    end 

    def create 
    @tteam = Tteam.new(tteams_params) 
    @tteam.save 
    redirect_to @tteam 
    end 

    private 
    def tteams_params 
    params.require(:tteam).permit(:p1, :p2, :p3, :c1, :c2, :c3) 
    end 
end 

と私のチームのためのショーのビュー(これはHAMLである)

Team1 
%p 
    In any given ranked game, the probability of 
    %b= @tteam.p1 
    winning with 
    %b= @tteam.c1 
    is 
    = Tteam.determine_champion_probability(@tteam.p1, @tteam.c1) 
    &#37 

%p 
    In any given ranked game, the probability of 
    %b= @tteam.p2 
    winning with 
    %b= @tteam.c2 
    is 
    = Tteam.determine_champion_probability(@tteam.p2, @tteam.c2) 
    &#37 

    %p 
    In any given ranked game, the probability of 
    %b= @tteam.p3 
    winning with 
    %b= @tteam.c3 
    is 
    = Tteam.determine_champion_probability(@tteam.p3, @tteam.c3) 
    &#37 
    %p 
    Your team's overall probability of winning is... 
    = Tteam.team_probability 
    &#37 

ビューの終わりに、私はteam_probabilityを呼び出すしようとしていますですクラスのメソッドchampion_probabilityの合計を現在返します。誰かがこの未定義のローカル変数のエラーをどのように修正できるかについてのアイデアがあれば大きな助けになります。ありがとうございました。

答えて

0

まあ、p1とc1は実際には未定義の変数です。パラメータとしてTteam.team_probabilityメソッドに渡すことができます。

関連する問題