保存到Rails 4.1.1中的枚举字段

时间:2014-07-10 07:59:34

标签: ruby-on-rails ruby-on-rails-4 enums

我正在尝试使用已添加到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)

我完全不知道为什么会这样。真的很感激一些帮助。

谢谢。

1 个答案:

答案 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