我正在尝试做类似的事情:
if filter_1
@field = @field.where()
else
@field = @field.where()
end
if filter_2
@field = @field.order()
end
etc.
但是如何@field
使用空查询进行初始化?我试过@field = Field.all
了,但这给出了一个数组,所以不允许链接。
我正在尝试做类似的事情:
if filter_1
@field = @field.where()
else
@field = @field.where()
end
if filter_2
@field = @field.order()
end
etc.
但是如何@field
使用空查询进行初始化?我试过@field = Field.all
了,但这给出了一个数组,所以不允许链接。
尝试scoped
模型类,例如
@fields = Field.scoped
@fields = @fields.where("your conditions") if filter_1
@fields = @fiels.order("your conditions") if filter_2
第一次初始化@field实例变量,请尝试引用类Field,即
过滤器1:@field = Field.where(...)
之后,如果您需要继续添加更多过滤器,您可以根据需要多次引用您的变量字段。
过滤器2向前:@field = @field.where(...)
由于 Filter1 将返回一个活动的 Record 关系,您可以在其上嵌套更多的条件子句。也不必担心性能问题,因为 SQL 只会在实际需要时生成和处理。(延迟加载)
如果您在过滤器的末尾添加@field.to_sql,您将能够看到所有 where 子句都方便地嵌套在一个 SQL 语句中。
另外,我建议您阅读Active Record Query Interface
编辑
创建一个方法 get_field。并使用它来添加过滤结果。
def get_field(field)
@field.is_a?(ActiveRecord::Relation) ? Field : field
end
get_field(@field).where(....)
get_field(@field).where(....)