【问题标题】:Argument ruby error - wrong number of arguments参数 ruby​​ 错误 - 参数数量错误
【发布时间】:2012-10-10 16:55:08
【问题描述】:

我有我的模型课

class Location < ActiveRecord::Base
 belongs_to :post
 attr_accessor :address, :category,:name,:postcode,:tel

 def initialize(result)

   @address = result["address"]
   @category = result["category"]
 end
end

在我的控制器中,我通过两种方式创建 Location 对象

Location.new(result) #works fine
@post.location.new         #get error

为什么在第二种情况下它寻找带有 2 个参数的构造函数。我还添加了带有两个参数的构造函数,但它不起作用。

我得到错误

wrong number of arguments (2 for 1)

编辑: 我如何使@post.location.new 工作?

【问题讨论】:

  • 它正在寻找一个参数,而不是两个。你只给了一个,然后是两个。 “x for y”的意思是“在预期 y 的地方实际上有 x”。
  • @post.location.new 没有任何参数。我只想要一个空对象。
  • 不提供参数时,您希望值是什么?
  • location = @post.build_location 也会出错吗?

标签: ruby-on-rails ruby


【解决方案1】:

您正在覆盖Location 的构造函数以仅采用一个参数,因此现在您必须在每次调用new 时提供它。您最好的选择可能是不这样做,或者至少提供一个默认值,如下所示:

def initialize(result = {})
   @address  = result["address"]
   @category = result["category"]
end

要建立一个空关联,你可以使用

@post.build_location

@post.location = Location.new

【讨论】:

    【解决方案2】:

    是的,对于您问题的最后一部分,( 2 for 1 )表示您提供了两个,但该方法只需要一个。只试一个。

    【讨论】:

      猜你喜欢
      • 2021-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多