如何在ActiveRecord中设置默认值?

如何在ActiveRecord中设置默认值?


我从Pratik看到一篇帖子,描述了一个丑陋,复杂的代码块:http : //m.onkey.org/2007/7/24/how-to-set-default-values-in-your-model


class Item < ActiveRecord::Base  

  def initialize_with_defaults(attrs = nil, &block)

    initialize_without_defaults(attrs) do

      setter = lambda { |key, value| self.send("#{key.to_s}=", value) unless

        !attrs.nil? && attrs.keys.map(&:to_s).include?(key.to_s) }

      setter.call('scheduler_type', 'hotseat')

      yield self if block_given?

    end

  end

  alias_method_chain :initialize, :defaults

end

我看过以下示例:


  def initialize 

    super

    self.status = ACTIVE unless self.status

  end


  def after_initialize 

    return unless new_record?

    self.status = ACTIVE

  end

我也看到人们在迁移中使用了它,但是我宁愿看到它在模型代码中定义。


有没有一种规范的方法可以为ActiveRecord模型中的字段设置默认值?


慕侠2389804
浏览 649回答 3
3回答

qq_遁去的一_1

我们通过迁移(通过:default在每个列定义上指定选项)将默认值放入数据库中,然后让Active Record使用这些值来设置每个属性的默认值。恕我直言,这种方法符合AR的原则:约定优于配置,DRY,表定义驱动模型,而不是相反。请注意,默认值仍在应用程序(Ruby)代码中,尽管不在模型中,但在迁移中。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Ruby