在Rails中可选的位置

时间:2017-01-03 15:47:16

标签: ruby-on-rails ruby activerecord rails-activerecord

如何在Rails中创建一个可选的位置?

我试过了:

@pages = Page
             .where(status: params[:status].present? ? params[:status] : 1)
             .where(parent_id: nil) if params[:status].blank?
             .order(sort_column + ' ' + sort_direction)

但它看起来要退出该块而是返回:undefined method 'where' for true:TrueClass

2 个答案:

答案 0 :(得分:6)

您可以将声明拆分为三行。 Rails会延迟加载您的查询,因此不要担心这里的性能。它会正常工作:

@pages = Page.where(status: params[:status].present? ? params[:status] : 1)
@pages = @pages.where(parent_id: nil) if params[:status].blank?
@pages = @pages.order(sort_column + ' ' + sort_direction)

答案 1 :(得分:4)

您可以使用哈希语法将条件传递给where,以便创建包含所有条件的哈希并将其传递给where

conditions = {}
conditions[:status] = params[:status].present? ? params[:status] : 1
conditions[:parent_id] = nil if params[:status].blank?

@pages = Page.where(conditions).order(sort_column + ' ' + sort_direction)