【问题标题】:Rails API: Selecting records that match parametersRails API:选择匹配参数的记录
【发布时间】:2013-12-05 20:17:54
【问题描述】:

我有以下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

【问题讨论】:

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


    【解决方案1】:

    无论如何,你都在链接它们,所以你为什么不干...

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-11
      • 2020-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多