默认值在创建和更新时不起作用 - Ruby on Rails

时间:2016-02-24 15:30:03

标签: ruby-on-rails ruby-on-rails-4

我的模型 user.rb 如下所示:

class User < ActiveRecord::Base

before_save :set_default

    def set_default
        self[:is_admin] || 0 
        self[:is_active] || 1   
    end 
end

现在,当我创建新用户时,它会插入is_admin = nullis_active = null。当我更新用户并发送参数is_admin= trueis_active = true或任何值时,它会正确更新它。我做了一些R&amp; D,发现我应该做以下

def set_default
        self.is_admin || 0 
        self.is_active || 1   
end 

现在案件变得完全交替了。现在意味着在创建时正确插入值。但更新没有区别。我也尝试了以下

def set_default
        self.is_admin ||= 0 
        self.is_active ||= 1   
end 

但仍然没有帮助。请解释一下发生了什么。任何帮助将不胜感激 。

1 个答案:

答案 0 :(得分:1)

如果您始终希望这些字段以该默认数据开头,我会将您的默认值移至架构。

def change
  create_table :users do |t|
    t.boolean :is_admin, default: false, null: false
    t.boolean :is_active, default: true, null: false
    ...
  end
end

这将设置users表的默认值,而不需要回调的额外成本/复杂性。如果您尝试将其中任何一个设置为nil,这会在您的应用程序中产生意外行为,这也会很好地爆发。

希望有所帮助。