2013-10-16 2 views
0

그래서 마이그레이션 파일을 생성하고 마이그레이션 한 다음 "Player"클래스를 작성했습니다. .RoR 앱에서 잘못된 인수 수가 잘못 되었습니까? 확실하지 않은 이유

: 나는이 코드를 실행하면 레일이 나에게 인수 "잘못된 번호 (0..2 3) 그래서 몇 가지를 제공합니다, 불행하게도

def get_most_recent_ladder 
    @top_80 = Team.all 
    # loop through all teams, add each player and their rating to the hash, sort by rating, limit to 200 
    all_players = [] 

    @top_80.each do |team| 
     url = "http://modules.ussquash.com/ssm/pages/leagues/Team_Information.asp?id=#{team.team_id}" 
     doc = Nokogiri::HTML(open(url)) 
     player_names = doc.css('.table.table-bordered.table-striped.table-condensed')[1].css('tr td a').map(&:content) 
     player_ratings = doc.css('.table.table-bordered.table-striped.table-condensed')[1].css('tr td:nth-child(4)').map(&:content) 
     for i in (0..player_names.length-1) 
     player = Player.create(player_names[i], player_ratings[i].to_f, team.name) 
     all_players << player 
     end 
    end 

    all_players = all_players.sort{|player1, player2| player1.rating <=> player2.rating}.reverse.first(200) 
    #insert creation of ladder object with order 
    @ladder = all_players 
    render 'ladder' 
    end 

:이 코드를 실행하기 위해 노력하고있어

class Player < ActiveRecord::Base 
    attr_accessible :name, :rating, :team 
end 

은 그래서 플레이어 클래스의 새 인스턴스를 만들 수 3 개 인수를 필요로한다은 "0..2을 표시 이유를 모르겠어요

2) :

1) 여기 내 플레이어 클래스입니다. "정상적인 정수 대신.

3) 또한, "Uninitialized Constant PagesController :: Player.

여기 내가 사용하고있어 HAML 레이아웃입니다 : 어떤 이유

#ladder 
    %tr 
    %th Player 
    %th Rating 
    %th Team 
    %tr 
    [email protected] do |player| 
     %td player.name 
     %td player.rating 
     %td player.team 

, 내 제목을 출력,하지만 말 그대로 "player.name", "player.rating", "플레이어를 출력합니다. 팀 "을 각 선수의 실제 이름, 등급 및 팀 대신 반복해서 표시합니다.

생각 하시겠습니까?

꽤 혼란스러워서 도움이 될 것 같습니다.

감사합니다, Mariogs

+0

은'0..2' 문제의 방법은 당신에게 0 ~ 2 인수를 기대하지만되었음을 의미 3을 제공했다. –

+1

또한, "초기화되지 않은 상수 에러"오류를주는 이유는 아마'rails c '대신'irb'를 실행했기 때문일 것이다. – jamby

답변

2

문제는 당신 create 호출입니다. 당신은 해시로 인수를 제공해야합니다 : 레일이 제공 한 3 개 개의 매개 변수가 귀하의 3 개 필드에 일치 해야하는 것을 알 수있는 (그리고 당신이 레일을 생각해서는 안됩니다위한 방법이 없기 때문에

player = Player.create(:name => player_names[i], :rating => player_ratings[i].to_f, :team => team.name) 

입니다 필드를 그 순서대로 유지합니다). 특정 키 (예 : :name, :rating 등)로 해시를 제공하면 레일스가 값을 입력란과 정확하게 일치시킬 수 있습니다. 당신이 당신의 .haml 파일에이 값을 표시 항목 전에 =를 사용하려면

:

%td= player.name 
%td= player.rating 
%td= player.team 
+0

Ruby를 배우고 1.9 이상을 사용하는 사람들을 위해 새로운 해시 표기법을 먼저 고려해 볼 가치가 있습니다. 'Player.create (이름 : ..., 등급 : ..., ...)' – tadman

+0

도움을 주셔서 감사합니다! 나는 여전히 "초기화되지 않은 상수 인 PagesController :: Player"를 얻고있다 ... 어떤 아이디어라도? – bclayman

+0

그래, 인쇄물을 제외하고이 문제를 해결했다고 생각합니다. 내 햄 (HAML) 레이아웃은 괜찮아 보입니다 (나는 괜찮다고 생각합니다).하지만 각 플레이어의 정보를 인쇄하지는 않습니다. 대신 "player.name", "player.rating", "player.team"을 계속해서 인쇄합니다. 생각? 다시 한 번 감사드립니다! – bclayman

관련 문제