Ruby on rails 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自己进行初始化,因为您实际上是在重写该行为。只
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?如果是这样,您需要在构造函数中处理它。