<%= form_for @organization do |f| %>
<%= render partial: 'shared/error_messages', locals: { object: f.object } %>
<label id="icon" for="country"></label>
<%= f.select :country, [['Afghanistan', 'AF'],
['Albania', 'AL'],
# etc.,
['Zimbabwe', 'ZW']
], {:prompt => 'Please select location', required: true} %>
<label id="icon" for="id_number"></label>
<%= f.text_field :id_number, placeholder: 'e.g.: 123abc' %>
<%= f.check_box(:no_id) + "  <i>No ID</i>".html_safe %>
<% end %>
在注册表单中,我有上面的代码。如何为此表单实现以下目标?
1)如何使country
成为必需?除非required: true
选择了国家/地区,否则它目前接受它。也许它也会看到&#34;请选择位置&#34;作为价值?
2)如何要求输入id_number
或选中no_id
的复选框,并且无法同时使用。我希望这种形式以及模型级别的要求。
更新:我在下面添加了第二项要求的模型验证,这似乎有效:
validate :id_or_no_id
def id_or_no_id
if (self.id_number.nil? || self.id_number.empty?) && self.no_id != true
errors.add(:id_number, "Need id or need to select checkbox")
elsif (self.id_number && !self.id_number.empty?) && (self.no_id && self.no_id == true)
errors.add(:id_number, "Can't have both id and checked checkbox")
end
end
如何让country
的表单验证生效?如果我将f.select
的最后一行更改为], {}, {:required => true, :placeholder => 'Select your location...'} %>
,则会在下拉框的顶部(因此占位符不起作用)如果没有选择国家/地区,则表单验证的工作原理是它要求选择国家/地区。但现在占位符还没有工作......
答案 0 :(得分:1)
确保您的模型有验证
class Model
validates :country, presence: true
validates :id_or_no_id
private
def id_or_no_id
if #custom logic here#
errors.add :some_field, "you must have a valid id or no id"
end
end
end
根据您的编辑,您的功能应如下所示,以便更好地进行编码 (这也是丑陋的代码)
validate :id_or_no_id
def id_or_no_id
if (id_number.nil? || id_number.empty?) && !no_id
errors.add(:id_number, "Need id or need to select checkbox")
elsif (id_number && id_number.present?) && no_id
errors.add(:id_number, "Can't have both id and checked checkbox")
end
end
也许这也有效
validate :use_one_id
def use_one_id
if !id_number && !no_id
errors.add :id_number, "you must select one...."
end
if id_number && no_id
errors.add :id_number, "can't select both"
end
end