前提・実現したいこと
※プログラミング初心者です。失礼があったら申し訳ございません
楽天のAPIを使用して、キーワード検索と詳細検索の2つの機能を有したアプリを作成しています。
詳細検索では、
- ジャンルID
- キーワード
- 除外キーワード
- 並び替え
- 送料の有無
を選択して検索できるような機能を目指しています。
以下は、コントローラー側でフォームからパラメーターを受け取った後の処理です。
(キーワード検索の場合)
RakutenWebService::Ichiba::Item.search(keyword: params[:keyword], page: page)
例えば、詳細検索で並び替えを選択して楽天APIを使用する場合は下記になります。
RakutenWebService::Ichiba::Item.search(keyword: params[:keyword], sort: params[:sort] ,page: page)
発生している問題・エラーメッセージ
上記記述の場合、keywordやsort以外にもNGKeywordなど、詳細検索で使用できる全てのパラメータを受け取る必要があります。
ただし、下記のように記述した場合、なにか1つでも値が入ってないとエラーとなってしまいます。
RakutenWebService::Ichiba::Item.search(keyword: params[:keyword], sort: params[:sort], NGKeyword: params[:NGKeyword], genreId: params[:genreId], postageFlag: params[:postagFlag] ,page: page)
試したこと
下記のように、if params[:sort].present? で1つずつのパラメータはチェックさせることができるのですが、膨大なパターンとなりあまり現実的ではないように思ってます。
def searchRequest(page) if params[:sort].present? RakutenWebService::Ichiba::Item.search(keyword: params[:keyword], NGKeyword: params[:NGKeyword], sort: params[:sort] ,page: page) else ngword = "" RakutenWebService::Ichiba::Item.search(keyword: params[:keyword], page: page) end end
なにか良いビジネスロジックはございませんでしょうか?
各パラメーターに何かしらのデフォルト値があって、フォームからnilが返ってきた場合はそのデフォルト値を使う・・・とかがいいのかなと思いましたが記述をどうすればよいのか?そもそもこの考え方でよいのか迷っております。
どうかご教授お願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/26 02:11 編集
2020/07/26 03:08
2020/07/27 02:30