我正在尝试使用已添加到Rails的枚举功能。我已经等了很长时间了。
以下是我如何设置它:
产品型号:
enum category: [:t_shirt, :hoodie, :jacket]
产品总监
def create
@product = Product.new(product_params)
if @product.save
redirect_to @product, notice: 'Product was successfully created.' }
else
render :new
end
end
def product_params
params.require(:product).permit(:title, :description, :category, :price)
end
新表格
<%= form_for(@product) do |f| %>
<div class="field">
<%= f.label :title %><br>
<%= f.text_field :title %>
</div>
<div class="field">
<%= f.label :description %><br>
<%= f.text_area :description %>
</div>
<div class="field">
<%= f.label :price %><br>
<%= f.text_field :price %>
</div>
<div class="field">
<%= f.label :category %><br>
<%= f.select :category, Product.categories, include_blank: "Select a category" %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
这会正确填充表单中的下拉字段,其中包含我在模型中定义的不同枚举选项的值。
但是,当我提交从下拉列表中选择其中一个类别的表单时,它会给我一个错误:
'0' is not a valid category
即使我的类别字段是整数字段,并且&#39; 0&#39;是与我在表单中选择的类别相关联的正确整数。
它还会突出显示产品控制器中create方法的以下行作为发生错误的位置:
@product = Product.new(product_params)
我完全不知道为什么会这样。真的很感激一些帮助。
谢谢。
答案 0 :(得分:2)
相反:
<%= f.select :category, Product.categories, include_blank: "Select a category" %>
尝试:
<%= f.select :category, Product.categories.keys, include_blank: "Select a category" %>
说明:
在Product.categories
哈希{"t_shirt"=>0, "hoodie"=>1, "jacket"=>2}
但在Product.categories.keys
数组中,["t_shirt", "hoodie", "jacket"]
帮助者需要select
。