如何在Rails中验证下拉列表的存在

时间:2016-03-23 15:52:31

标签: ruby-on-rails ruby validation

我想知道如何验证用户是否选择了某个值。

我的collection_select是:

= f.collection_select :person_id, @employee, :id, :fullName, {prompt: "Select employee"}, {class: "form-control"}

2 个答案:

答案 0 :(得分:2)

我会用:

validates :person, :presence => true

这可确保所选的person_id不仅存在,而且还属于现有的Person

请注意,如果出现错误,则会在:person上添加错误,而不会在person_id上添加错误。根据您呈现验证错误的方式,您必须检查错误,如下所示:object.errors[:person]

如果您想在person_id字段旁边显示错误但无法更新视图,那么您可能需要使用检查person的{​​{3}},但会向person_id添加错误{1}}:

validate :person_existing

private
def person_existing
  errors.add(:person_id, :missing) if person.blank?
end

答案 1 :(得分:1)

对于一般的视图测试,我会针对从控制器操作返回的HTML编写测试。这样做的好处就是不进行浏览器内测试(即您不必使用网络驱动程序/无头浏览器),并且由于单个浏览器可以正确呈现您的HTML,因此只需确保您的测试更简单控制器操作返回的HTML是正确的。

如果你想验证这一点,当用户选择一个给定的项目时,它已经被选中......那真的由浏览器来完成这项工作,所以我不知道你是否真的想要测试那。但是,您应该能够检查标记上的selected属性(see here

那就是说,一般情况下不要对视图测试过于疯狂,如果这确实是你想要的。该视图是大多数应用程序的一部分,它们经常变化,并且非常脆弱。您可能会发现自己在测试套件中经常追逐视图更改。