Wrong number of arguments?

2019-02-12 16:40发布

问题:

I'm following Michael Hartl's tutorial here and am trying to create an index of users.

My code:

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

and

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

I've made sure my code matches the code in the tutorial exactly, but I'm getting this error:

wrong number of arguments (2 for 1)

What am I doing wrong? Any thoughts?

回答1:

According to the tutorial, the gravatar_for method is defined as

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

Notice that it only accepts one parameter: the user. Later in chapter 7, after the exercises, the tutorial describes how to add a size parameter:

# 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

Judging by your error message, you haven't updated the method to use the optional size parameter.



回答2:

If you followed the tutorial and added the options hash to the function then you're only missing the {} around the options.

This should work. <%= gravatar_for user, {size: 52} %>



回答3:

Check here:

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