Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.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_Ruby_Activerecord - Fatal编程技术网

Ruby on rails Rails使用默认值初始化新对象

Ruby on rails Rails使用默认值初始化新对象,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我有以下课程: class Question < ActiveRecord::Base attr_accessible :choices end 这是可行的,但似乎应该在模型中这样做,以促进数据完整性。有更好的方法吗?您有几种解决方案。按优先顺序 创建自定义方法,并在需要此类功能时使用它 class Question < ActiveRecord::Base attr_accessible :choices def self.prepare new(:choi

我有以下课程:

class Question < ActiveRecord::Base
  attr_accessible :choices
end

这是可行的,但似乎应该在模型中这样做,以促进数据完整性。有更好的方法吗?

您有几种解决方案。按优先顺序

  • 创建自定义方法,并在需要此类功能时使用它

    class Question < ActiveRecord::Base
      attr_accessible :choices
    
      def self.prepare
        new(:choices => ['','','',''])
      end
    end
    
  • 覆盖
    选项

  • 出于几个原因,我鼓励第一种方法

  • 您将有更多的代码控制权。只有当您明确需要时,才会指定默认值。事实上,在某些情况下,该记录的一个实例被初始化(想想测试),并且大部分时间可能不需要赋值
  • 这是向公开与ActiveRecord不紧密耦合的自定义API迈出的一大步
  • 它公开了一种更易于维护的方法
  • 如果你的应用程序复杂性增加,你会喜欢它的
  • 另一个解决方案:

    4在迁移中设置为默认值

    class CreateQuestions
    但我同意第一个是最好的解决方案


    在任何情况下,都不要覆盖初始化,在第二个解决方案中描述的初始化后使用
    回调。

    因此您只需调用问题。从控制器准备好吗?目前只有在新建和创建之后才会发生这种情况,但在其他地方也可能发生这种情况。是的。在控制器中调用自定义方法并没有什么坏处。实际上,在应用程序中公开自定义模型API是个好主意。
    class Question < ActiveRecord::Base
      attr_accessible :choices
    
      def self.prepare
        new(:choices => ['','','',''])
      end
    end
    
    class Question < ActiveRecord::Base
      attr_accessible :choices
    
      after_initialize :default_choices
    
      protected
    
      def :default_choices
        self.choices ||= ['','','','']
      end
    end