blog@west2538onRailsの技術ブログトップ記事一覧ログ一覧2018-11-21【Rails】openBDのWebAPIによる書籍検索でmodelにバリデーションを実装プログラミングに入門して5ヶ月。個人開発のリアルRPG系Webアプリ「まちかどルート」をv4.0rc1にバージョンアップしました。今回追加したのは書籍や漫画を読んだら投稿してレベルアップできる機能です。書誌情報・書影を自由にhttps://openbd.jp/フリーで利用できてレスポンスが高速。アクセスキーも不要ですし、とても使いやすいと思いました。↓書籍検索時の動画です。2018年11月17日JQueryで書籍検索を簡単実装こちらの記事を参考にしました。});});</script>$("#thumbnail").htmlのところにinputのhidden属性をいくつか書いてあります。これはopenBDで取得できる著者名bookauthorなどの各種書籍情報を検索フォームには表示させずデータベースにいったん保存しておき、index.html.erbといった別のviewで読み込んで表示するためです。下記バリデーションにも活用しています。form.html.erbviewの書籍検索フォーム部分(一部抜粋)です。oi-bookやoi-magnifying-glassなど)を利用しています。%>modelのバリデーションに条件を付ける検索フォームにきちんと情報が入力されないままデータベースに保存されることのないよう、バリデーションを追加してみました。それにはRailsに標準装備のメソッドvalidatesを使いました。使うだけでなく、条件もしっかり指定しないとうまくいかなかったので、下記のようにmodel(まちかどルートの場合はpost.rb)に記述しました。"書籍や漫画を読んだ"endまず少なくとも書籍のISBNコードと著者名が存在していればOKだと思ったので、複数のバリデーションを一度に指定できるメソッドwith_optionsを使いました。これによってbookisbnとbookauthorが両方とも入力されているかをチェックします。:book_select?という条件式を加えることによって、書籍投稿時だけこのバリデーションを行うようにしました。(post.title)によって判別しているんです。いうわけで、バリデーションを通過できないとエラーメッセージが表示されます。modelだとmessage、viewのform.html.erbだと下記3行のコードがそれです。APIを通じて各種情報を取得し、さらに投稿ボタンを押したときにバリデーションで投稿内容をチェックする...。この一連の流れを実装するのに3日もかかってしまいました。APIをこんなふうに使うのは初めてだったので苦労しましたが、今回の経験でほかのAPIも使っていけそうな自信がちょっとだけつきました。これからも必要に応じて少しずつ学んでいきます。WebAPI検索プロフィールハル@west2538onRails40代でセミリタイア。自宅をギルドハウス十日町というユニークな古民家にデザイン。