今日は昨日予行した通り、RailsのアプリからWordPressのテーブルを更新してみた。
取り敢えず、アプリとWordPressが同じサーバーにあることを前提として作ったんだけど、別々でも問題なさそう。

今日のやったこと、できたこと

  • ブログ執筆
  • タイムチケット申し込み
  • プログラミング

明日への課題

  • 娘の運動会 笑

今日のワーク

久しぶりに運営しているマーケティング系のブログを更新した。
と言っても、タイムチケットで販売を始めたチケットの宣伝だけど。

https://www.chiba-marketing.com/

しかし、最終更新日が3月上旬にもかからわず、毎日70人くらいのアクセスがあるっていう。
記事の選択に間違いはなかったってことなのかも。

あと、やっぱりWordPressはSEOに強いな。
いや、厳密にはWordPressのおかげだけってわけじゃないんだけど。
そこを勘違いしている人多いから困る。

そして、今作ってるアプリはそんなWordPressの強みを生かしつつ、データメンテナンス機能をRailsで作ろうって感じです。

いや、Railsでもブログ的なアプリも作れるけど、SEOのこと考えてコーディングするの大変だからね。
だったらそこはWordPressに任せた方が早い。完全にオリジナルのアプリなら別だけど、出力がブログならね。

というわけで、昨日はネストとファイルアップロードに悩み、今日はWordPressのテーブルを更新するのに悩む。

と思いきや、意外とすんなりできちゃった。
いくつかポイントがあったので、説明するとこんな感じ。

まず、空のmodelを作成する。
この時、そのままだとmigrationファイルもできちゃうけど、これはスキップしてOK。

bin/rails g model posts --migration=false

ちなみに、wp_posts用なのでpostsにしてます。
これで、modelのみ作成されます。

そしたら、このmodelを以下みたいに修正しました。

class Post < ApplicationRecord
 self.table_name = "wp_posts"
 self.primary_key = :ID
 databases = YAML.load(ERB.new(File.read('config/hogehoge/database.yml')).result)
 establish_connection(databases[Rails.env])
 # 初期値設定
 before_create do
  self.post_status = "publish"
  self.comment_status = "closed"
  self.ping_status = "closed"
  self.post_type = "page"
  self.post_excerpt = ""
  self.to_ping = ""
  self.pinged = ""
  self.post_content_filtered = ""
 end
 validates :post_date, :presence => {:message => "更新日時が入力されていません"}
 validates :post_content, :presence => {:message => "内容が入力されていません"}
 validates :post_title, :presence => {:message => "タイトルが入力されていません"}
end

table_nameでWordPressのテーブル名を指定する。あと一応、Primary Keyもしておいた。
そして、WordPress用のdatabase.ymlを作ってそれを読み込み、接続し直す。

あと、before_createで初期値設定を書いてるのは、なんかエラーが帰ってくるから。
でも実はinsertはされてるっていう面倒なことになるので、default値のない項目に全部空値を突っ込んでます。

あとは、Railsのテーブルと同様にnewしたり、検索したり、saveしたりできます。
ただ、findはうまくいかなかった。なので、whereとfirstで代替えにしました。

あと、今回は親子関係までは作らずに処理したので、今後はそこもやってみたいと思う。
問題なくできるんだろうか?

あと、WordPressのデータベースに接続した後、もとのデータベースには自動的に接続されるみたいなのでそこも心配いらなそう。
つまり、modelごとに接続するデータベース切り替えるの結構簡単にできそうかなと思う。

今作ってる他のサービスで、別のサーバのデータベースに接続する仕組みを作る予定なんだけど、今回のやり方使えばあっさりできちゃいそうだなと。
新しくmodel作ってdatabese.yml書いて、そこに接続サーバーの情報の書いて、establish_connectionすればいいだけ。

なんか予想以上に収穫のあった今日の開発でした。
無事終わってよかったよかった。

あと、タイムチケットで販売始めたのはいいんだけど、アクセスが全然ない。
こりゃこまったぞということで、タイムチケットの中の人のチケットを購入した。

タイムチケットの攻略法を教えてくれるみたいだし、もしかしたら。。。
タイムチケット内での集客方法がわかったら、それも伝えていきたいなとは思ってます。ブログの記事にもなるしね。

そして、明日は娘の運動会。
天気予報は雨だけど、どうなることやら。

ほんと微妙な天気予報で、朝の9時から雨予報なんだけど、保育園は8時の天気で判断するっていう。
それで本当に大丈夫なのか?保育園向かってる最中に大雨とか嫌だよ!

まぁ、雨だったら仕事しようかな。

そんな感じ。