我有以下方法:
def self.fetch_by_subcat(subcat_id, state)
where(state: state).joins(:subcategories).where("subcategory_id = ? AND published = ?", subcat_id, true)
end
问题是,如果我的状态为空,我会返回一个空数组。所以我想将我的state参数设置为默认值,例如'any',它将简单地跳过where(state ...)查询并直接进入连接。像
这样的东西def self.fetch_by_subcat(subcat_id, state='any')
where(state: state).joins...
end
有办法吗?试图避免if / else。
答案 0 :(得分:6)
您可以构建这样的范围:
def self.fetch_by_subcat(subcat_id, state)
scope = joins(:subcategories).where("subcategory_id = ? AND published = ?", subcat_id, true)
scope = scope.where(state: state) unless state.blank?
scope
end
答案 1 :(得分:0)
还有另一种方法:
def self.fetch_by_subcat(subcat_id, state = 'state')
joins(:subcategories).where("subcategory_id = ? AND published = ? AND state = #{state}", subcat_id, true)
end
它是如何工作的?如果你通过状态,那么它只是插入。如果不是,查询将如下所示:WHERE table_name.state = table_name.state。 这总是如此。
这里唯一要添加的是从sql注入中保护此方法并仅传递特定的允许状态值。