【问题标题】:Wrong number of arguments?参数数量错误?
【发布时间】:2012-06-06 14:51:05
【问题描述】:

我正在关注 Michael Hartl 的教程 here 并尝试创建用户索引。

我的代码:

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

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

我已确保我的代码与教程中的代码完全匹配,但我收到此错误:

wrong number of arguments (2 for 1)

我做错了什么?有什么想法吗?

【问题讨论】:

  • 您在哪一行代码中遇到此错误?你能展示你的踪迹吗?
  • 了解导致错误的语句会很有用。但本质上,您将两个参数传递给一个只接受一个参数的方法。
  • 解决了问题原来是gravatar_for中的一个错误。对不起!

标签: ruby-on-rails erb


【解决方案1】:

根据教程,gravatar_for方法定义为

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

注意它只接受一个参数:用户。 Later in chapter 7,经过练习,教程描述了如何添加尺寸参数:

# 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

从您的错误消息来看,您尚未更新使用可选尺寸参数的方法。

【讨论】:

  • 是的,这正是我的错误。谢谢!
【解决方案2】:

如果您按照教程操作并将选项哈希添加到函数中,那么您只是缺少选项周围的 {}。

这应该可行。 &lt;%= gravatar_for user, {size: 52} %&gt;

【讨论】:

  • 这实际上是 gravatar_for 函数本身的错误。不过谢谢!
  • Ruby 不需要大括号,只要哈希是参数的最后一部分。
【解决方案3】:

在这里查看:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多