Ruby on rails 3 Rails3选择框发布一个空白变量,但HTML格式良好

Ruby on rails 3 Rails3选择框发布一个空白变量,但HTML格式良好,ruby-on-rails-3,forms,validation,Ruby On Rails 3,Forms,Validation,我的视图中的select标记有问题 首先,我使用的是Rails 3.1.1和Ruby 1.9.2 p290 该型号是一种耗材,具有名称、供应商、再订购编号、类型以及与之兼容的相关打印机型号 未正确验证的字段是类型,该类型是从耗材模型中的数组中输入的值,验证应针对数组中的一个元素进行 在模型中,我这样定义字段的验证 TYPES = [ "REM", "REM-HICAP", "OEM", "OEM-HICAP" ] validates :type, inclusion: TYPES 在部

我的视图中的select标记有问题

首先,我使用的是Rails 3.1.1和Ruby 1.9.2 p290

该型号是一种耗材,具有名称、供应商、再订购编号、类型以及与之兼容的相关打印机型号

未正确验证的字段是类型,该类型是从耗材模型中的数组中输入的值,验证应针对数组中的一个元素进行

在模型中,我这样定义字段的验证

  TYPES = [ "REM", "REM-HICAP", "OEM", "OEM-HICAP" ]
  validates :type, inclusion: TYPES
在部分耗材的视图表单中,我创建了select标记

 <div class="field">
  <%= f.label "Type" %><br />
  <%= f.select :type, Consumable::TYPES, prompt: 'Select a type...',
               :selected => params[:type] %>
</div>
正如调试信息所显示的那样,使用“选择”框中的值正确设置了类型字符串,并且模型中的类型是字符串。相反,该表单显示验证错误类型不包括在列表中,如果我删除验证,数据库将显示类型字段的nil值

验证在什么时候应用于表单,控制器是否通过尝试保存对象来触发它

在Rails第四版的敏捷Web开发中,我在depot应用程序中使用了相同的方法来验证下拉框,基本上使用了相同的代码,但是数组的名称不同,并且它工作正常

我刚刚在depot应用程序中测试了相同的验证,它在同一个工作站上工作,所以我会计算出设置不一致的情况


谢谢

我终于发现了我的错误:类型在Rails中受保护,并将变量名更改为Kind以使其正常工作

<div class="field">
  <label for="consumable_Type">Type</label><br />
  <select id="consumable_type" name="consumable[type]">
    <option value="">Select a type...</option>
    <option value="REM">REM</option>
    <option value="REM-HICAP">REM-HICAP</option>
    <option value="OEM">OEM</option>
    <option value="OEM-HICAP">OEM-HICAP</option>
  </select>
</div>
---
utf8: ?
_method: put
authenticity_token: nZZ9MastYswVCDrvAbgVLTUWqSRZLVrvRLmxOqPYk7I=
consumable:
  description: Black Toner
  supplier_id: '1'
  reorder_no: '123456'
  type: OEM
  printer_model_ids:
  - '1'
  - '3'
commit: Update Consumable
action: update
controller: consumables
id: '1'