Wrong number of arguments?

吃可爱长大的小学妹 提交于 2019-12-18 21:50:39

问题


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


来源:https://stackoverflow.com/questions/10916705/wrong-number-of-arguments

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!