1
我有幾個類的方法可以幫助查詢數據庫,但我想爲發送到這些方法的參數添加某種驗證。例如,Rails類方法驗證
def self.get_ayahs_by_range(surah_id, from, to)
self.where('quran.ayah.surah_id = ?', surah_id)
.where('quran.ayah.ayah_num >= ?', from)
.where('quran.ayah.ayah_num <= ?', to)
.order('quran.ayah.surah_id, quran.ayah.ayah_num')
end
其從控制器通過使params[:surah_id]
,params[:to]
和params[:from]
該函數調用。
有時,由於某種原因,我們有:surah_id
被undefined
這導致一團糟。我如何通過驗證來修復?
除了strong_params之外的任何對params驗證的建議對索引操作不起作用我覺得呢?
控制器:
def index
unless valid_params?
return render json: {message: 'Params are wrong.'}
end
params_hash = (params[:range] || ("#{params[:from]}-#{params[:to]}")) + "/#{params[:quran]}/#{params[:audio]}/#{params[:content]}"
if params.key?(:range)
range = params[:range].split('-')
elsif params.key?(:from) && params.key?(:to)
range = [params[:from], params[:to]]
else
range = ['1', '10']
end
if (range.last.to_i - range.first.to_i) > 50
return render json: {error: "Range invalid, use a string (maximum 50 ayat per request), e.g. '1-3'"}
end
@results = Rails.cache.fetch("surahs/#{params[:surah_id]}/ayahs/#{params_hash}", expires_in: 12.hours) do
ayahs = Quran::Ayah.get_ayahs_by_range(params[:surah_id], range[0], range[1])
Quran::Ayah.merge_resource_with_ayahs(params, ayahs)
end
render json: @results
end
如何在控制器中獲取參數可以發佈它們。可能是有強烈的參數解決方案 –
只是一個API調用我的控制器? –