У меня проблема NoMethodError в Cards # card_list.
У меня проблема, в трех строках написано:
.placeholder2.container.visible.card_list.row
- items.each_with_index do |cards, i|
.col-md.card-column{data: {color: cards[4].first.color, type: cards[4].first.card_class}}
%h4
%span{class: "icon-#{i == 4 ? ico_item : icon}"}
= entities[i]
В файле журнала говорится:
ActionView::Template::Error (undefined method `first' for nil:NilClass):
Мой полный код в этом шаблоне:
.placeholder2.container.visible.card_list.row
- items.each_with_index do |cards, i|
.col-md.card-column{data: {color: cards[1].first.color, type: cards[1].first.card_class}}
%h4
%span{class: "icon-#{i == 4 ? ico_item : icon}"}
= entities[i]
- cards[1].each do |card|
.col-md-12.card_line.tooltip-card{style: "padding:0px;margin:0;", data: {id: card.id, color: card.color, type: card.card_class, rarity: card.rarity, set: card.card_set, eng_title: card.eng_title&.downcase || '', title: card.title&.downcase}}
= link_to card, class: "#{color_class(card.color)}-card-tooltip card-tooltip", target: '_blank' do
%div.cards_gr{class: "bg1_#{color_class(card.color)}", style: "border-left: 4px solid #{rarity_color(card.rarity)};"}
%div{:style => "padding-right: 10px;float:left;"}
- if card.card_class == 1
= image_tag card.hero_icon.url(:small), width: '20px', height: '20px', style: "margin-top:-4px;"
- elsif card.card_class == 3
%span{:style => "font-size:14px;font-weight:bold;"}= card.item_gold
- else
%span{:style => "font-size:14px;font-weight:bold;"}= card.manacost
= card.title
Как я могу это исправить?





В первом примере у вас есть cards[4], а во втором - cards[1]. Не уверен, что это несоответствие сделано намеренно. Вы получаете NoMethodError, потому что в массиве карт нет 5 элементов. cards[4] возвращает nil.
Ваша проблема в том, что card [4] равен нулю, вы должны проверить это и, возможно, установить некоторые значения по умолчанию, например:
items.each_with_index do |cards, i|
if cards[4]
data = { color: cards[4].first.color,type: cards[4].first.card_class }
else
data = { color: 'default', type: 'default' }
end
.col-md.card-column{data: data}
end
Использование значений по умолчанию может быть хорошей идеей, но это не совсем так. К элементам из Hash, используемым по умолчанию, нельзя получить доступ с использованием точечной нотации, например .card_class, .color и т. д.
это могло быть другое решение
Похоже,
cardsне содержит 5 элементов. Помните, что индексы массива начинаются с 0, поэтомуcards[4]относится к 5-му элементу массива. Это будетnil, если в массиве не так много элементов.