1

是否可以将 :symbols 传递给有效值?方法,以便我可以定义对象在某个点之前是否有效?

例如。如果我有一个对象 Person 并且想要调用Person.valid?(:basic_info)并且仅当存在某个字段子集(例如名称和性别)时它才会返回 true?

我看到了一些我认为可能有用但无法使其工作的东西,它是条件验证http://guides.rubyonrails.org/active_record_validations_callbacks.html#conditional-validation,特别是分组条件验证,但我无法得到它在职的...

任何人都可以在这里帮我...

4

3 回答 3

1

我认为现在还没有这样的存在,但是您可以自己编写一个方法,如下所示

def is_valid_field?(field)
  self.valid?
  self.errors[field].blank?
end

然后就person.is_valid_field?(:basic_info)

于 2012-09-25T02:37:29.200 回答
1

要验证basic_info您必须定义一个自定义验证器:

class Person < ActiveRecord::Base
  validate :basic_info_present

  def basic_info_present
    if name.blank? || gender.blank?
      errors.add(:basic_info, "can't be in blank")
    end
  end
end

如果您想查看特定字段是否有错误,可以使用@Salil 的方法。

但是请注意,由于basic_info您的模型中没有调用实际属性,因此此处的验证错误不会出现在表单等中(尽管它们将在errors哈希中)。这可能是也可能不是你想要的。

于 2012-09-25T02:49:20.650 回答
1

我使用条件验证让它工作,所以现在我可以.valid?(:basic)在我只想检查这个人是否有电话的名字时使用 say ......

validates_presence_of :name, :when => [:basic]

此处的文档:http: //apidock.com/rails/ActiveRecord/Validations/valid%3F

这样我可以让对象在调用时返回 true,.valid?即使它没有名字,好时光......

于 2012-09-27T01:20:58.763 回答