【问题标题】:Rails new - wrong number of arguments (0 for 1) [closed]Rails new - 参数数量错误(0 代表 1)[关闭]
【发布时间】:2011-11-08 13:16:27
【问题描述】:

我在orders_controllernew 方法中有以下内容

@order = Order.new

Rails 给我以下错误:

wrong number of arguments (0 for 1)

app/models/order.rb:2:in `<class:Order>'
app/models/order.rb:1:in `<top (required)>'
app/controllers/orders_controller.rb:33:in `new'

我正在使用 Rails 3.0.5

谢谢!

编辑:order.rb 可以在下面找到

class Order < ActiveRecord::Base
  has_many :line_items, :dependent => destroy

  PAYMENT_TYPES = [ "Check", "Credit card", "Purchase order" ]

  validates :name, :address, :email, :pay_type, :presence => true
  validates :pay_type, :inclusion => PAYMENT_TYPES

  def add_line_items_from_cart(cart)
    cart.line_items.each do |item|
      item.cart_id = nil
      line_items << item
    end
  end
end

【问题讨论】:

  • 您可以发布您的order.rb 文件吗?
  • 显示您的 Order 类源代码,其中可能定义了一个新的或初始化方法。
  • Ruby 错误实际上非常具有描述性。您没有向构造函数提供任何参数,而至少需要一个参数。如果您将源发布到 orders.rb,我们可以帮助确定所需的参数应该是什么。
  • 我把源码发布到了order.rb!

标签: ruby-on-rails ruby controller arguments new-operator


【解决方案1】:

order.rb 中的第一个声明应为:

  has_many :line_items, :dependent => :destroy

【讨论】:

    【解决方案2】:

    您的代码中有错字。您在:destroy 中错过了:

    将第 2 行中的 :dependent =&gt; destroy 更改为 :dependent =&gt; :destroy。它应该可以工作。

    【讨论】:

    • 这就是我上面写的...无需重新发布答案
    • @joshim5 ..我在您发布之前发布了我的答案...检查发布时间..这不是转发..事实上它是我们的转发;)
    • 这是不正确的。我在你之前 2 分钟发布了我的。
    • @joshim5..请点击oldest标签...您可以先看到我的答案..您还可以通过将光标保持在每个答案的名称部分附近来检查发布时间并看到工具提示..如果这还不够,请查看screenshot..您可以看到我的答案是在您发布前 3 分钟发布的..SO 网站这么说..如果您不相信..我;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多