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

时间:2011-10-31 05:39:33

标签: ruby-on-rails ruby-on-rails-3

在RoR 3.1中,“验证”仍无法在模型中设置默认值。还是有吗?如果没有,设置默认值的最佳方法是什么?

4 个答案:

答案 0 :(得分:7)

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

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

class Abc
   before_save :set_default

   protected

   def set_default
     self.xyz = "default" unless self.xyz
   end
end

答案 1 :(得分:7)

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

        self.up do 
           update_column :table_name,:column_name,:default=>your default value
         end

答案 2 :(得分:5)

这对我很有用

class WorkLogEntry < ActiveRecord::Base 

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

  ...
end

答案 3 :(得分:0)

当模型获得带有空文件的表单参数时,该字段的参数将具有nil参数。因此,如果您初始化相同的@ foo ='bar'并且用户发送带有空params [:foo]的表单,则Model.create(params [:model])将具有foo =&gt;为零。

  1. 您可以在创建对象之前检查所有参数
  2. 您可以通过迁移在数据库结构中设置默认参数:

    create_table:评论做| t |
      t.text:comment,:default =&gt; “酒吧”