【发布时间】:2015-12-22 14:41:14
【问题描述】:
我正在使用Model.new(<attributes here>) 在rails 控制台中手动创建对象。有没有一种简单的方法可以列出模型需要我包含哪些属性才能使.save 调用成功?
我正在运行 rails 4.2.3
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4 activerecord model rails-console
我正在使用Model.new(<attributes here>) 在rails 控制台中手动创建对象。有没有一种简单的方法可以列出模型需要我包含哪些属性才能使.save 调用成功?
我正在运行 rails 4.2.3
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4 activerecord model rails-console
您可以使用Model.validators 获取一组验证器。您必须以某种方式对其进行解析以提取这些验证是否存在,例如:
presence_validated_attributes = Model.validators.map do |validator|
validator.attributes if validator.is_a?(ActiveRecord::Validations::PresenceValidator)
end.compact.flatten
【讨论】:
我找到了一种更简单的方法来完成同样的事情:
当您创建失败时,您可以检查对象上的错误消息。
# app/models/price.rb
class Price < ActiveRecord::Base
validates_presence_of :value
end
# in console
p = Price.new()
=> #<Price id: nil, created_at: nil, updated_at: nil, value: nil>
p.save
=> false
p.errors.messages
=> {:value=>["can't be blank"]}
【讨论】:
如果您的强制属性带有错误消息
book = Book.new
book.valid?
book.errors.messages
如果您只想要属性名称而没有错误消息
book = Book.new
book.valid?
book.errors.messages.keys
【讨论】: