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

j-d*_*exx 1 ruby ruby-on-rails 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
Run Code Online (Sandbox Code Playgroud)

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

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

MrY*_*iji 7

validates方法可以做到这一点:

class User < ActiveRecord::Base
  validates :full_name, :username, :email, :address, presence: true
Run Code Online (Sandbox Code Playgroud)

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

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

以上例子扩展:

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
Run Code Online (Sandbox Code Playgroud)