collected_cards.each do |card|
ac = Card.find_by('name like ?', "#{card}")
if ac.nil?
next
else
confirmed_cards << ac
end
end
我正在解析一个字符串数组。对于每个字符串,我尝试从我的postgres ac = Card.find_by('name like ?', "#{card}")
问题是,AC对象不被Ruby / Rails视为数组甚至哈希,当我尝试在我的视图中呈现它时,这会导致我出现此错误:
undefined method `each' for #<Card:0x007f9368494a50>
以下是视图代码的一小部分:
<% @cardset.each do |cardset| %>
<% cardset.each do |collection| %> # I get an error here
<h1>Cards matching <%= collection.first[:name] %></h1>
<% collection.each do |card| %>
<%= image_tag "#{card[:image]}" %>
<%= card[:name] %>
cardset
应该是我遍历(上下文)
谢谢!
编辑:我的控制器中负责此视图的方法:
def cards
@collection = params[:imgur_link]
unique_path = @collection.gsub("https://imgur.com/a/", "")
@imgur = ImgurService.new(unique_path).call
@ocr = OcrService.new(@imgur).call
@cardset = CardsService.new(@ocr).call
end
CardService:
def initialize(ocrservice)
@cards_from_ocr = ocrservice
end
def call
match_ocr_with_ac
# display_max_price
end
def match_ocr_with_ac
confirmed_cards = []
collected_cards = @cards_from_ocr
collected_cards.each do |card|
ac = Card.find_by('name like ?', "#{card}")
if ac.nil?
next
else
confirmed_cards << ac
end
end
confirmed_cards
end
答案 0 :(得分:2)
find_by
方法查找匹配某些条件的第一条记录(source)
如果你想将confirmed_cards
一个同名的记录推入ac = Card.where('name like ?', "#{card}").to_a
,你应该这样做:
target/classes
答案 1 :(得分:0)
假设cards
表中有一个名为card_text
的字段,其中包含您想要的字符串,您要查找的代码可能是:
collected_cards.pluck(:card_text).each do |card_text|
ac = Card.find_by('name like :pattern', pattern: "%#{card_text}%")
next unless ac
confirmed_cards << ac
end
或
confirmed_cards = collected_cards.pluck(:card_text).select do |card_text|
Card.find_by('name like :pattern', pattern: "%#{card_text}%")
end
Pluck将获取一组活动记录对象并返回一个仅包含您指定字段的数组。
我更喜欢使用带有冒号名称语法的绑定参数,因为它与绑定参数的顺序分离。