2012-06-06 10 views
9

Sto seguendo il tutorial di Michael Hartl here e sto cercando di creare un indice di utenti.Numero errato di argomenti?

Il mio codice:

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

e

<%= 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> 

ho fatto in modo che il mio codice corrisponde al codice nel tutorial esattamente, ma sto ottenendo questo errore:

wrong number of arguments (2 for 1) 

Cosa sto sbagliando? qualche idea?

+1

Quale riga di codice ottieni questo errore? Potresti mostrare la tua traccia? – badams

+1

Sapere quale dichiarazione che sta causando l'errore sarebbe utile. Ma in sostanza stai passando due wrguments a un metodo che accetta solo un argomento. – harald

+0

** Risolto il problema ** risulta che si è verificato un errore in 'gravatar_for'. Scusate! –

risposta

24

Secondo l'esercitazione, il metodo gravatar_for è definito come

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 

noti che accetta solo un parametro: l'utente. Later in chapter 7, dopo gli esercizi, il tutorial descrive come aggiungere un parametro di dimensione:

# 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 

A giudicare dal vostro messaggio di errore, non si è aggiornato il metodo di utilizzare il parametro di dimensione opzionale.

+0

Sì, questo è stato esattamente un mio errore. Grazie! –

1

Se hai seguito il tutorial e aggiunto l'hash delle opzioni alla funzione, mancano solo {} attorno alle opzioni.

Questo dovrebbe funzionare. <%= gravatar_for user, {size: 52} %>

+0

In realtà era un errore nella funzione gravatar_for. Grazie comunque! –

+0

Ruby non richiede le parentesi finché l'hash è l'ultima parte degli argomenti. – BalinKingOfMoria

-1

Controllare qui:

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