如何在模型中设置默认值? - 在Ruby on Rails 3.1中

Hop*_*eam 4 ruby-on-rails ruby-on-rails-3

在RoR 3.1中,"validates"仍无法在模型中设置默认值.还是有吗?如果没有,设置默认值的最佳方法是什么?

Wah*_*Ali 7

一种方法是在迁移中设置默认值.这将是一个将设置到您的数据库的属性.您可以在这里阅读更多内容:http://api.rubyonrails.org/classes/ActiveRecord/Migration.html

另一种方法是设置一个before过滤器,比如before_save或before_create,然后检查属性上的值是否为nil,你可以将它设置为某个值.

class Abc
   before_save :set_default

   protected

   def set_default
     self.xyz = "default" unless self.xyz
   end
end
Run Code Online (Sandbox Code Playgroud)

  • 或者是`self.xyz || ="默认"`这里最好? (4认同)
  • 如果您有一个布尔值,则两者都不起作用。那是因为false.present?是假的。在第二种情况下,即使 xyz 设置为 false,也会为 xyz 分配一个值。在这种情况下最好的选择是做 self.xyz.nil? (3认同)
  • 迁移最适合设置默认值 (3认同)

Nav*_*eed 7

迁移最适合设置默认值
写入迁移到更新列并设置默认值

        self.up do 
           update_column :table_name,:column_name,:default=>your default value
         end
Run Code Online (Sandbox Code Playgroud)


Dar*_*win 5

这对我很有用

class WorkLogEntry < ActiveRecord::Base 

  after_initialize do
    self.work_done_on ||= Date.today
  end

  ...
end
Run Code Online (Sandbox Code Playgroud)