我有一个study
可以有participants
。我有一个simple_form用户可以添加参与者。它看起来有点像一个表:如何在Ruby on Rails模型中进行条件验证?
name | company | email OR mobile | timezone
name | company | email OR mobile | timezone
name | company | email OR mobile | timezone
默认情况下,该屏幕有三个字段集行,并且用户可以根据需要添加更多的行。每一行都是一个参与者。
我希望我的participant
模型仅验证已填写的行,并忽略空行,因为即使我们默认向用户显示三个,但并非所有三个都是必填字段。
以下是app/models/participants.rb
的相关部分。
class Participant < ApplicationRecord
belongs_to :study
validates :name, presence: true
validates :company, presence: true
validates :time_zone, presence: true
if :channel == 'sms'
validates :mobile_number, presence: true
elsif :channel == 'email'
validates :email, presence: true
end
end
在participants_controller.rb
我:
def index
3.times { @study.participants.build } if @study.participants.length.zero?
end
问题是因为simple_form认为,所有这三个字段是必需的,而不仅仅是第一行,我得到一个错误。
谢谢!对于你的第一点,我尝试在simple_form文档后面通过'required:false'作为默认表单,但是无法使其工作。在每个输入上加上'required:false'这个技巧。 –
我还发现,在这种情况下,只有一种方法可以检查它是否是短信,然后使用'unless'作为电子邮件验证程序。例如'如果短信?和'除非是短信?'在移动字段和电子邮件字段验证器行末尾。 –