Проблема с использованием вложенного массива в 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"]