我应该如何编写依赖于参数键的case语句?

时间:2013-07-25 09:16:54

标签: mysql ruby-on-rails ruby

例如,我有索引操作:

  def index
    if params[:query]
      @pharmaceutics = Pharmaceutic.where("name LIKE ?", params[:query])
    elsif params[:code]
      @pharmaceutics = Pharmaceutic.where("barcode LIKE ?", params[:code])
    else
      @pharmaceutics = Pharmaceutic.all
    end
  end

当我发送两个参数:代码和查询时,我想使用它们来过滤我的药剂。我有MySQL数据库。

1 个答案:

答案 0 :(得分:4)

我可能会使用scoped方法,如下所示:

def index
  scope = Pharmaceutic.scoped # Pharmaceutic.all if you use Rails 4
  scope = scope.where('name LIKE ?', params[:query]) if params[:query].present?
  scope = scope.where('barcode LIKE ?', params[:code]) if params[:code].present?
  @pharmaceutics = scope
end

您也可以编写自定义作用域并将where(...)替换为它们,以使代码更清晰。