Rails API:选择与参数匹配的记录

时间:2013-12-05 20:17:54

标签: ruby-on-rails ruby ruby-on-rails-3 model-view-controller

我有以下Pixel模型,其中包含以下属性mediapagedisabledselective

我正在寻找最可重用的方法来进行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

1 个答案:

答案 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