轨。 [“Category1”,1]的未定义方法`name':Array

时间:2016-11-09 15:36:36

标签: ruby-on-rails

我仍然不太清楚循环,但这次更令人困惑。

我有产品类别模型以及它们之间的关系:has_many :belongs_to

在我的应用程序导航栏中,我有一个显示类别的下拉列表:

<% @categories.each do |cat| %>
    <li><%= link_to cat.name, cat %></li>
 <% end %>

(我稍后会将此循环移至部分)

它工作正常,但现在我注意到如果我尝试使用此链接<%= link_to 'New Product', new_product_path %>它会抛出未定义方法'name'的错误...我甚至无法理解为什么此链接会触发此和平代码:

enter image description here

Products_controller.rb

  def new
    @product = Product.new
    @categories = Category.all.map { |c| [ c.name, c.id ] }
  end

shema.rb

  create_table "categories", force: :cascade do |t|
    t.string   "name"
    t.text     "desc"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

2 个答案:

答案 0 :(得分:0)

你需要:

<li><%= link_to cat[:name], cat %></li>

您已将@categories映射到Array,因此您需要在名称索引处定位数组。 (或在你的情况下item[:name]

答案 1 :(得分:0)

你需要做

@categories = Category.all.map { |c| { name: c.name, id: c.id } }

在视野中

<% @categories.each do |cat| %>
    <li><%= link_to cat[:name], cat %></li>
 <% end %