2016-11-09 41 views
0

我對循環還不是很清楚,但這次更令人困惑。Rails。 [「Category1」,1]的未定義方法`name':Array

產品類別模型,並將其之間的關係:的has_many:belongs_to的

在我的應用程序導航欄我有一個下拉菜單,顯示類:

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

(我將推動這一循環,局部更高版本)

這是工作的罰款,但現在我發現,如果我嘗試使用這個鏈接<%= link_to 'New Product', new_product_path %>它拋出我未定義的方法「名」的這個錯誤......我甚至無法理解,爲什麼這個鏈接觸發這個和平的代碼:

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 

回答

0

你需要做

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

,並鑑於

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

哦,你是第一個,但兩者的答案是不是很準確。我不得不像目標這樣的對象名稱:'

  • <%= link_to cat [:name],cat%>
  • ' –

    +0

    JD是的,修復了我的答案 – Avdept

    +0

    此外 - 你知道爲什麼我只有那個鏈接?如果我在任何其他鏈接上導航應用程序,所有工作都正常... –

    0

    您需要:

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

    已映射@categoriesArray,所以你需要在名稱索引處定位數組。 (或你的情況item[:name]