いつもお世話になっています。
現在ポートフォリオを作成中なのですがエラーが解決できない状態ですのでご教授頂きたいです。
環境
rails
mysql
状況
クラスのインスタンスの配列をinsert_allメソッドを使い、一括保存したいが以下のエラーが出てググったりと記事を見て、試しましたが解決できない状況ですのでご教授頂きたいです。
#エラーログ
NoMethodError - undefined method `keys' for #<Rakuten:0x00007fd4a9d49dd0>: app/controllers/rakutens_controller.rb:17:in `index' Started POST "/__better_errors/ec76e08566d64a16/variables" for ::1 at 2021-03-21 15:53:52 +0900
記述コード
マイグレーション
class CreateRakutens < ActiveRecord::Migration[6.0] def change create_table :rakutens do |t| t.string :item_name t.integer :item_price t.string :item_url t.string :image_urls t.integer :review_average t.string :shop_name t.string :genle_id t.timestamps end end end
rakuten_controller.rb
マイグレーションには「genle_id」としていますがjsonで送られてくるデータは「genre_id」ですので下記の記述で合っていない箇所がありますので訂正しておきます。
Class RakutensController < ApplicationController PER = 30 def index @items = [] #楽天Apiのデータ取得 results = RakutenWebService::Ichiba::Item.search( shopCode: 'shop-senjin', page: params[:page], hits: PER) # read(result)については、privateメソッドで設定。 results.each do |result| #rakutenクラスのインスタンスの作成 item = Rakuten.new(read(result)) # Rakutenテーブルに入っている重複するデータは配列に入れない unless Rakuten.all.include?(item) @items << item end end #配列の中身があるか確認 unless @items.empty? Rakuten.insert_all(@items) end @items = Rakuten.all.page(params[:page]) end private def read(result) image_url = result["mediumImageUrls"][0] item_name = result["itemName"] item_price = result["itemPrice"] item_url = result["itemUrl"] shop_name = result['shopCode'] genle_id = result["genreId"] review_average = result['reviewAverage'] created_at = Time.current updated_at = Time.current { image_urls: image_url, item_name: item_name, item_price: item_price, item_url: item_url, shop_name: shop_name, genle_id: genle_id, review_average: review_average, created_at: created_at, updated_at: updated_at } end
試したこと
キーが入っていない可能性があると考え、コンソールで調べましたが、特に異常はなくしっかりとデータが入っていました。
[#<Rakuten id: nil, item_name: "コイルストラップ6cm(2本入)フック新【陸上自衛隊 自衛隊 迷彩 戦人 Senjin ミリタリー ...", item_price: 418, item_url: "https://item.rakuten.co.jp/shop-senjin/6567/", image_urls: "https://thumbnail.image.rakuten.co.jp/@0_mall/shop...", review_average: 0, shop_name: "shop-senjin", genle_id: "213694", created_at: "2021-03-21 07:12:51", updated_at: "2021-03-21 07:12:51">,
記述の仕方ももう一度調べて、違う記述の仕方も試しましたが、同じエラーが発生してしまいました。
以下試した書き方
insert_all items
Rakuten.insert_all items
わかる方いましたらご教授お願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。