Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails中的模型构造函数可以为空吗?_Ruby On Rails - Fatal编程技术网

Ruby on rails Rails中的模型构造函数可以为空吗?

Ruby on rails Rails中的模型构造函数可以为空吗?,ruby-on-rails,Ruby On Rails,我在rails中有一个“成本”模型。如下所示: class Cost < ActiveRecord::Base belongs_to :cost_type has_many :cost_distributions attr_accessor :epp def initialize() end 我得到一个错误:参数数量错误(0代表1)。为什么它会忽略我的空构造函数?您需要允许ActiveRecord自己进行初始化,因为您实际上是在重写该行为。只

我在rails中有一个“成本”模型。如下所示:

class Cost < ActiveRecord::Base

    belongs_to :cost_type
    has_many :cost_distributions

    attr_accessor :epp

    def initialize()
    end

我得到一个错误:参数数量错误(0代表1)。为什么它会忽略我的空构造函数?

您需要允许ActiveRecord自己进行初始化,因为您实际上是在重写该行为。只需将
initialize
更改为:

def initialize()
 super
end
但是,如果您根本不提供构造函数,Rails允许您创建不带参数的模型:

Cost.new

那么,您的空
初始化
方法是否在做其他事情?如果没有,甚至不需要它。

您需要允许ActiveRecord自己进行初始化,因为您实际上是在重写该行为。只需将
initialize
更改为:

def initialize()
 super
end
def initialize(*args)
  super
end
但是,如果您根本不提供构造函数,Rails允许您创建不带参数的模型:

Cost.new
那么,您的空
初始化
方法是否在做其他事情?如果没有,它甚至不需要

def initialize(*args)
  super
end
这是秘方


是秘方。

一般来说,覆盖ActiveRecord的
初始化方法

如果你的
initialize()
什么都不做,你就不需要它了。把它拿走

class Cost < ActiveRecord::Base

    belongs_to :cost_type
    has_many :cost_distributions

    attr_accessor :epp

end
类成本

您仍然可以调用
Cost.new
(如果您不重写它,正确的初始化方法将由
ActiveRecord
本身提供)。

一般来说,重写ActiveRecord的
initialize
方法

如果你的
initialize()
什么都不做,你就不需要它了。把它拿走

class Cost < ActiveRecord::Base

    belongs_to :cost_type
    has_many :cost_distributions

    attr_accessor :epp

end
类成本

您仍然可以调用
Cost.new
(正确的初始化方法将由
ActiveRecord
本身提供,如果您不重写它)。

如果
initialize
函数为空,并且只包含“super”,那么它应该可以工作。在发布之前,我在本地进行了测试,以验证解决方案,并且效果良好。我非常确信代码中还有其他东西(您没有发布的部分)导致了错误。我已经从我的Cost类中删除了所有方法,它似乎仍然需要一个带参数的initialize方法。您是否使用嵌套的\u属性?使用嵌套属性时必须使用initialize(*args)。如果
initialize
函数为空,并且只包含“super”,则该函数应能正常工作。在发布之前,我在本地进行了测试,以验证解决方案,并且效果良好。我非常确信代码中还有其他东西(您没有发布的部分)导致了错误。我已经从我的Cost类中删除了所有方法,它似乎仍然需要一个带参数的initialize方法。您是否使用嵌套的\u属性?使用嵌套属性时必须使用initialize(*args)。除非您想在其中添加一些特殊内容,否则不需要构造函数。你是不是要把散列传递给Cost.new?如果是这样的话,你需要在你的构造函数中处理它。你不需要构造函数,除非你想在其中添加一些特殊的东西。你是不是要把散列传递给Cost.new?如果是这样,您需要在构造函数中处理它。