如何检查模型的所有属性是否都设置了值?

时间:2014-05-13 16:01:13

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

我目前有以下方法:

def complete?
  attributes.delete_if{|k,v| k == 'id' or k == 'user_id'}.values.each do |value|
    return false if value.blank?
  end
  true
end

有更好的方法吗?我只是想知道,在我的实例中,是否已将所有属性与id和user_id区分开来。必须有更好的方法来做到这一点。

我在rails 3和ruby 1.9.3上(只是因为人们不会给出适用于新版本的答案)

1 个答案:

答案 0 :(得分:7)

validates方法可以做到这一点:

class User < ActiveRecord::Base
  validates :full_name, :username, :email, :address, presence: true

如果要验证除少数属性之外的所有属性的存在:

class User < ActiveRecord::Base
  validates *(self.column_names - ['id', 'created_at', 'updated_at']), presence: true

以上示例扩展:

class User < ActiveRecord::Base
  validates *self.validable_columns, presence: true

  def self.validable_columns
    excluded_columns = ['id', 'created_at', 'updated_at'] # columns to be excluded in the `validates`
    self.column_names - excluded_columns 
  end