gpt4 book ai didi

ruby - 如果有条件,Rails 4 模型 rspec

转载 作者:数据小太阳 更新时间:2023-10-29 08:37:31 24 4
gpt4 key购买 nike

我是 Rails 的新手,我正在尝试查看我的对象以查看某个值是否为真,以便验证该对象中的所有其他项目。如果此人是用户,我当然有,在应用程序/模型中验证姓名和电子邮件。为此编写规范的最佳方式是什么?

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”的字段?看起来该方法应该返回一个 bool 值(true 或 false),而现在它返回一个将始终被评估为 true 的符号,例如,如果您这样做

if :is_user
puts "will always happen" # this will be printed
end

如果数据库中有该字段,则无需创建该方法,因为 Rails 会为模型数据库中的所有 bool 字段生成带问号的方法。

现在,要测试您是否可以使用像 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

关于ruby - 如果有条件,Rails 4 模型 rspec,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27381405/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com