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调用我的控制器? –