我有以下Pixel
模型,其中包含以下属性media
,page
,disabled
,selective
我正在寻找最可重用的方法来进行API调用,选择与API调用中传递的参数匹配的所有对象。 API调用可以采用0个参数或任意数量的参数
这是我到目前为止所拥有的。我相信它会奏效,但我绝对认为必须有更好的解决方案。
def pixels_by_params
if(params[:media] && params[:page] && params[:selective] && params[:disabled])
pixels = TrackingPixel.media(params[:media]).page(params[:media]).selective(params[:selective]).disabled(params[:disabled])
elsif(params[:media] && params[:page] && params[:selective])
pixels = TrackingPixel.media(params[:media]).page(params[:media]).selective(params[:selective])
elsif(params[:media] && params[:page])
pixels = TrackingPixel.media(params[:media]).page(params[:media])
elsif(params[:media])
pixels = TrackingPixel.media(params[:media])
...
...
...
end
答案 0 :(得分:2)
无论如何你都在联系所有人,所以为什么不呢......
pixels = params[:media] ? TrackingPixel.media(params[:media]) : TrackingPixel.all
pixels = pixels.page(params[:page]) if params[:page]
pixels = pixels.selective(params[:selective]) if params[:selective]
pixels = pixels.disabled(params[:disabled]) if params[:disabled]
或者如果您更喜欢花哨的循环,您可以:
pixels = params[:media] ? TrackingPixel.media(params[:media]) : TrackingPixel.all
[:page, :selective, :disabled].each do |attr|
pixels = pixels.send(attr, params[attr]) if params[attr]
end