2012-06-06 10 views
9

Podążam za tutorialem Michaela Hartla here i próbuję utworzyć indeks użytkowników.Zła liczba argumentów?

Mój kod:

class UsersController < ApplicationController 
    before_filter :signed_in_user, only: [:index, :edit, :update] 
    . 
    . 
    . 
    def index 
    @users = User.all 
    end 
    . 
    . 
    . 
    end 

i

<%= provide(:title, 'All users') %> 
<h1>All users</h1> 

<ul class="users"> 
    <% @users.each do |user| %> 
    <li> 
     <%= gravatar_for user, size: 52 %> 
     <%= link_to user.name, user %> 
    </li> 
    <% end %> 
</ul> 

Zrobiłem pewien mój kod zgodny z kodem dokładnie w tutorialu, ale ja dostaję ten błąd:

wrong number of arguments (2 for 1) 

Co robię źle? jakieś pomysły?

+1

Której linii kodu otrzymujesz ten błąd? Czy mógłbyś pokazać swój ślad? – badams

+1

Znajomość instrukcji, które powodują błąd, byłaby przydatna. Ale w istocie przekazujesz dwa argumenty na metodę, która przyjmuje tylko jeden argument. – harald

+0

** Rozwiązany problem ** okazuje się być pomyłką w 'gravatar_for'. Przepraszam! –

Odpowiedz

24

Według tutorialu metoda gravatar_for jest zdefiniowany jako

def gravatar_for(user) 
    gravatar_id = Digest::MD5::hexdigest(user.email.downcase) 
    gravatar_url = "https://secure.gravatar.com/avatar/#{gravatar_id}" 
    image_tag(gravatar_url, alt: user.name, class: "gravatar") 
end 

zauważyć, że przyjmuje tylko jeden parametr: użytkownik. Later in chapter 7 po ćwiczeniach, tutorial opisuje jak dodać parametr size:

# Returns the Gravatar (http://gravatar.com/) for the given user. 
def gravatar_for(user, options = { size: 50 }) 
    gravatar_id = Digest::MD5::hexdigest(user.email.downcase) 
    size = options[:size] 
    gravatar_url = "https://secure.gravatar.com/avatar/#{gravatar_id}?s=#{size}" 
    image_tag(gravatar_url, alt: user.name, class: "gravatar") 
end 

sądząc po wiadomości o błędzie, nie zostały zaktualizowane sposobu korzystania z opcjonalnego parametru size.

+0

Tak, to był dokładnie mój błąd. Dzięki! –

1

Po wykonaniu samouczka i dodaniu opcji skrótu do funkcji, brakuje tylko {} wokół opcji.

To powinno zadziałać. <%= gravatar_for user, {size: 52} %>

+0

To był właściwie błąd w funkcji gravatar_for. W każdym razie dzięki! –

+0

Ruby nie wymaga nawiasów klamrowych, o ile wartość skrótu jest ostatnią częścią argumentów. – BalinKingOfMoria

-1

Sprawdź tutaj:

<%= gravatar_for user, :size => 52 %>