我有一个包含多个字段的表格。在Rails方面,有些验证可以正常工作。但是我也有一个要求,其中应该验证两个输入字段的组合。
这些属性是project_id
和unbillable_id
。它们中只有一个应该用值填充,因此当两个字段都填充或两个字段都为空时,它应该会失败。我应该怎么做?
这是控制器:
def create
authorize! :create, Activity
@activity = Activity.new(activity_params)
respond_to do |format|
if @activity.save
format.js { render :action => "create_success"}
else
format.js { render :action => "create_failure"}
end
end
end
这是create_failure.js.erb:
alert("Failed to upload record: <%= j @activity.errors.full_messages.join(', ').html_safe %>");
我假设您正在寻找XOR验证
在您的情况下,app/models/activity.rb
应按以下方式进行操作:
选项1:
类Activty <ActiveRecord :: Base
validates :project_id, presence: true, allow_nil: true
validates :unbillable_id, presence: true, allow_nil: true
validate :xor_activity
private
def xor_activity
unless (project_id.blank? ^ unbillable_id.blank?)
errors.add(:base, "Specify a Project or a Unbillable, not both")
end
end
结尾
选项2:形成一个数组并计算元素数-https: //stackoverflow.com/a/7369899/1125893
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句