質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

0回答

1232閲覧

RSS取得し、DBに上書きして格納したい!

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

0クリップ

投稿2018/05/08 16:19

編集2018/05/11 06:53

前提・実現したいこと

WPのRSSの上位3つを取得して、DBに突っ込みたいです。
その際に、順番を振りたくその値(rank)を増やしています。
each文でRSSの記事を1つずつ取り出しupdateするようにしたいです。

過去に入っていたレコードは必要なく、上書きしたいです。
お知恵を貸していただいけないでしょうか。。。

Ruby

require 'rss' class WpEntriesJob < ApplicationJob queue_as :default # def perform #新着記事を取得 feedUrl = 'https://*********/feed/' rss = RSS::Parser.parse(feedUrl) #DBに新たに新着3件の記事を格納(idも再び1からとなる) rss.items.first(3).each.with_index(1) do |item, i| wpentry = WpEntry.new wpentry.rank = "#{i}" wpentry.type = 0 wpentry.title = item.title wpentry.link = item.link wpentry.category = item.category wpentry.date = item.date wpentry.description = item.description wpentry.update_columns rank: wpentry.rank, type: wpentry.type, title: wpentry.title, link: wpentry.link, category: wpentry.category, date: wpentry.date, description: wpentry.description # end end end

###schema.rb

create_table "wp_entries", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC" do |t| t.text "title" t.text "link" t.string "category" t.datetime "date" t.text "description" t.integer "type" t.integer "rank" t.datetime "created_at", null: false t.datetime "updated_at", null: false end

###console

[21] pry(main)> require 'rss' => false [22] pry(main)> class WpEntriesJob < ApplicationJob [22] pry(main)* queue_as :default [22] pry(main)* [22] pry(main)* [22] pry(main)* # def perform [22] pry(main)* #新着記事を取得 [22] pry(main)* feedUrl = 'https://*******/*******/feed/' [22] pry(main)* rss = RSS::Parser.parse(feedUrl) [22] pry(main)* #DBに新たに新着3件の記事を格納(idも再び1からとなる) [22] pry(main)* rss.items.first(3).each.with_index(1) do |item, i| [22] pry(main)* wpentry = WpEntry.new [22] pry(main)* wpentry.rank = "#{i}" [22] pry(main)* wpentry.type = 0 [22] pry(main)* wpentry.title = item.title [22] pry(main)* wpentry.link = item.link [22] pry(main)* wpentry.category = item.category [22] pry(main)* wpentry.date = item.date [22] pry(main)* wpentry.description = item.description [22] pry(main)* wpentry.update_columns rank: wpentry.rank, type: wpentry.type, title: wpentry.title, link: wpentry.link, category: wpentry.category, date: wpentry.date, description: wpentry.description [22] pry(main)* # end [22] pry(main)* end [22] pry(main)* end ActiveRecord::ActiveRecordError: cannot update a new record from /home/developer/app/*******/vendor/bundle/ruby/2.4.0/gems/activerecord-5.1.2/lib/active_record/persistence.rb:326:in `update_columns'

###試したこと
update?の使い方やら、配列?ハッシュ?の理解がまだまだ足りていないようです。
色々書き方試してみましたがうまく行きません。
sql文でTRUNCATE TABLEは使わない方法で探しています。
table削除してしまうと、ページ真っ白になってしまうみたいです。

補足情報(FW/ツールのバージョンなど)

ruby 2.4.1
Rails 5.1.4
mysql2

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/05/08 20:47

できていることできていないこと、わかっていることわかっていないことを明確にしてください。コードだけ提示されて「教えて」ではほぼ丸投げで、回答の方向性が分かりません。https://teratail.com/help/question-tips#questionTips2-1
退会済みユーザー

退会済みユーザー

2018/05/11 06:55

ご指摘ありがとうございます。内容修正いたしました。また不足な点がございましたらご教授ください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問