3

我有一个表单,我想验证是否选择了一个选项。我不想接受默认的启动选项“请选择产品”

我现在使用它并得到一个未初始化的 contant 错误。我相信我写错了语法。控制器:

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>");
        }

直到选项结束,结束脚本。

4

4 回答 4

2

我建议:prompt为您的选择助手使用该选项(关于此的文档不​​是很直接,但在同一版本的此版本中可以:http: //apidock.com/rails/ActionView/Helpers/FormTagHelper/选择标签)。这允许您定义一个辅助文本字符串以鼓励用户选择一个选项,但在提交表单时将返回一个 nil 值。

<%= f.select :product_name, PRODUCT_NAME_OPTIONS, prompt: 'Select an option' %>

我建议的下一件事是......而不是验证模型上的存在,而是执行 validates_inclusion_of。这样,您可以在模型中定义一组选项,然后在上面的选择助手中使用相同的一组选项,以及在您的验证中。这样你就知道表单没有被操纵来包含一个不同的选项,它实际上让事情变得有点干燥。

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'
于 2013-09-05T18:37:07.933 回答
2

您应该使用select helper 中的include_blank ,如下所示:

<%= f.select :product_name, options_for_select([["opt1",1],["opt2",2]]), include_blank: true %>

然后,在模型上

validates :product_name, :presence => true

@MrYoshiji 在我的回答中评论了一些真实的东西 - 如果你不允许它为空白,简单的方法就是不在选择中添加空白选项

于 2013-09-05T18:09:49.797 回答
2

我认为您正在寻找的是此选择的占位符。在这种情况下,我使用了禁用选项:

<% options = options_for_select(["Select an option", ["Product #1",1], ["Product #2",2]], disabled: "Select an option") %>

<%= f.select :product_name, options %>
于 2013-09-05T18:23:50.687 回答
0

我没有让这变得太复杂,而是添加了一个长度验证,因为默认值比产品名称长得多。简单是最好的,但是应该有一个字符串验证器选项。

 validates :product_name, presence: true, length: {
maximum: 21,
too_long: ": Must select a product"

}

于 2013-09-05T20:15:53.483 回答