rails 里面针对一些稍微复杂的查询,就需要手动来写查询条件,比如:
Product.where("subname = :id or id = :id", id: id).first
这种写法几个问题:
然后我尝试用了一下 arel,结果变成了这种奇怪的东西:
t = Product.arel_table
Product.where(t[:subname].eq(id).or(t[:id].eq(id))).first
好吧,更不易读了。看来 sql 要比语法树更容易人工识别。。。
大家的看法是怎样的呢?
猜测是我的写法不对,应该是:
t = Product.arel_table
Product.where(t.subname == id || t.id == id)
然后可以用 arel 定义一套这样的 dsl。。。