Проблема с использованием вложенного массива в HAML / Rails

Я получаю "неопределенный метод" crop "для {"crop"=>"Carrots", "amount"=>12.15}:BSON::OrderedHash'со следующим представлением:

%table
  %tr
    %th Date of Harvest
    %th Crops
    %th Photo
    %th
    %th
    %th
    %th

  - @harvests.each do |harvest|
    %tr
      %td= harvest.created_at
      %td  
        - harvest.harvested_crops.each do |harvested_crop|
          %tr  
            %td= harvested_crop.crop
            %td= harvested_crop.amount
      %td  
      %td= harvest.photo
      %td= link_to 'Show', harvest
      %td= link_to 'Edit', edit_harvest_path(harvest)
      %td= link_to 'Destroy', harvest, method: :delete, data: { confirm: 'Are you sure?' }

Модель, как показано ниже:

class Harvest

        include MongoMapper::Document


        #references
        key :photo,             String  #photo of combined harvest (many crops)
        key :harvested_crops,   Array
        key :user_id,           ObjectId

        timestamps!

        #Validations
        validates_presence_of :harvested_crops
end

Данные из оболочки, как показано ниже:

> db.harvests.find()
{ "_id" : ObjectId("5067846437bca62bccc3729d"), "user_id" : "5067844537bca62bccc3729b", "photo" : "mybumpercrop.jpg", "harvested_crops" : [     {   "crop" : "Carrots",     "amount" : 12.15 },     {   "crop" : "Apples",  "amount" : 32.55 },     {   "crop" : "Potatoes",    "amount" : 12.44 },     {   "crop" : "Spinach",     "amount" : 1.23 } ] }
{ "_id" : ObjectId("5067846f37bca62bccc3729e"), "user_id" : "5067844637bca62bccc3729c", "photo" : "carrotsnspuds.jpg", "harvested_crops" : [    {   "crop" : "Carrots",     "amount" : 1112.15 },   {   "crop" : "Potatoes",    "amount" : 3212.44 } ] }

1 ответ

Решение

Это выглядит как harvested_crops представляет собой массив объектов Hash, каждый из которых содержит два ключа, "crop" а также "amount", Нет никаких crop метод на стандартном объекте Hash; вместо этого вы используете оператор [], как массив, для доступа к содержимому. Так что постарайтесь:

%td= harvested_crop["crop"]
%td= harvested_crop["amount"]
Другие вопросы по тегам