今日は昨日予行した通り、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時の天気で判断するっていう。
それで本当に大丈夫なのか?保育園向かってる最中に大雨とか嫌だよ!
まぁ、雨だったら仕事しようかな。
そんな感じ。