如果选择了某个选项,我有一个表单要验证。 我不想接受默认的启动选项“请选择产品”
我现在使用它并获得未初始化的内容错误。我相信我写的语法错了。 控制器:
validates :product_name, :presence => { :unless => (product_name = "Please Select a Product")}
查看:
<span class="span5 pagination-right">
<%= f.label "Product" %>
<%= f.select :product_name, options_for_select([ ["Please Select a Product"] ]) %>
</span>
我应该怎么写这个选项? 谢谢
product_name更改为:
<script>
$(document).ready(function() {
$('#ticket_product_name').html("<option>Please Select a Product</option>");
$('#ticket_firmware_version_string').html("<option>Please Select a Firmware</option>");
$('#category').change(function(){
$('#ticket_product_name').html("<option>Please Select a Product</option>");
$('#ticket_firmware_version_string').html("<option>Please Select a Firmware</option>");
if ($('#category').val() == "blah")
{
$('#ticket_product_name').append("<option>blah</option>");
$('#ticket_product_name').append("<option>blah</option>");
}
else if ($('#category').val() == "another category")
{
$('#ticket_product_name').append("<option>blah product</option>");
}
直到选项结束,结束脚本。
答案 0 :(得分:2)
您应该使用the select helper中的include_blank,如下所示:
<%= f.select :product_name, options_for_select([["opt1",1],["opt2",2]]), include_blank: true %>
然后,在模型上
validates :product_name, :presence => true
@MrYoshiji在我的回答中评论了一些真实的东西 - 如果你不允许它是空白的,那么简单的方法就是不在选择中添加空白选项
答案 1 :(得分:2)
我认为你要找的是这个选择的占位符。在这种情况下,我使用了禁用选项:
<% options = options_for_select(["Select an option", ["Product #1",1], ["Product #2",2]], disabled: "Select an option") %>
<%= f.select :product_name, options %>
答案 2 :(得分:2)
我建议使用:prompt
选项作为你的选择助手(关于这个的文档不是很直接的转发,但是在同一个版本的同一个版本中它是可以的:http://apidock.com/rails/ActionView/Helpers/FormTagHelper/select_tag)。这允许您定义一个帮助文本字符串以鼓励用户选择一个选项,但在提交表单时将提交一个nil值。
<%= f.select :product_name, PRODUCT_NAME_OPTIONS, prompt: 'Select an option' %>
我建议的下一件事是......不是验证模型的存在,而是执行validates_inclusion_of。这样,您可以在模型中定义选项集,然后在上面的select helper中使用相同的选项集,以及验证中的选项。这样你就知道表单没有被操作以包含一个不同的选项,它实际上让事情有点干嘛。
Product
PRODUCT_NAME_OPTIONS = {'opt 1' => 'opt1', 'opt 2' => 'opt2'}
validates_inclusion_of :product_name, :in => PRODUCT_NAME_OPTIONS.values, :message => 'choose from the available options'
答案 3 :(得分:0)
我只是添加了一个长度验证,而不是让它太复杂,因为默认值比产品名称长得多。简单是最好的,但是应该有一个字符串验证器选项。
validates :product_name, presence: true, length: {
maximum: 21,
too_long: ": Must select a product"
}