将ActiveRecord对象转换为数组

时间:2018-05-31 19:04:33

标签: sql ruby-on-rails ruby activerecord

 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

2 个答案:

答案 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将获取一组活动记录对象并返回一个仅包含您指定字段的数组。

我更喜欢使用带有冒号名称语法的绑定参数,因为它与绑定参数的顺序分离。