我是Rails的新手,我试图查看我的对象以查看值是否为true,以便验证对象中的所有其他项目。如果该人是用户,我当然可以在应用程序/模型中验证姓名和电子邮件。为此编写规范的最佳方法是什么?
class Members < ActiveRecord::Base
validates_presence_of :email, if: :is_user?
validates_presence_of :first_name, if: :is_user?
validates_presence_of :last_name, if: :is_user?
def is_user?
:is_user
end
end
成员表上是否有一个名称为“ is_user”的字段?似乎该方法应该返回一个布尔值(true或false),而现在它返回的符号将始终被评估为true,例如,
if :is_user
puts "will always happen" # this will be printed
end
如果数据库中存在该字段,则无需创建该方法,因为rails会为模型数据库中的所有布尔字段生成带有问号的方法。
现在,要测试您是否可以使用诸如shoulda_matchers之类的gem或编写诸如以下内容的自己的测试
describe "validations" do
context "member is a user" do
subject { Member.new(is_user: true) }
it "validates presence of email" do
subject.valid?
expect(subject.errors["email"]).to include("can't be blank")
end
end
context "member is not an user" do
subject { Member.new(is_user: false) }
it "doesn't require fields to have info" do
subject.valid?
expect(subject.errors["email"]).to_not include("can't be blank")
expect(subject.errors["first_name"]).to_not include("can't be blank")
expect(subject.errors["last_name"]).to_not include("can't be blank")
end
end
end
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句