首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MetaWhere到Squeel的迁移

MetaWhere到Squeel的迁移
EN

Stack Overflow用户
提问于 2011-09-05 06:02:25
回答 2查看 745关注 0票数 0

MetaWhere中,我使用循环、if else语句将条件组合到sql变量中。

代码语言:javascript
复制
sql = {}
email_starts_with = "vany%"
sql["growth"] = 0..200
sql = sql & (:rating > 50)
sql = sql & (:email =~ email_starts_with)
.....
.....
User.where(sql).to_sql
=> "SELECT \"users\".* FROM \"users\" WHERE \"users\".\"growth\" BETWEEN 0 AND 200 AND    \"users\".\"rating\" > 50 AND \"users\".\"email\" ILIKE 'vany%'"
user = User.where(sql).first
=> #<User id: 1, .................................. >

如何使用Squeel执行相同的操作

感谢您的帮助)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-08 22:29:53

我使用Arel解决了我的问题。我认为(我刚刚把MetaWhere代码改成了Arel)和MetaWhere是一样的。

代码语言:javascript
复制
t = User.arel_table

email_starts_with = "vany%"
sql = t[:rating].gt(50)
sql = t[:growth].in(0..200)
sql = sql.and(t[:email].matches(email_starts_with))

User.where(sql).to_sql
=> "SELECT \"users\".* FROM \"users\"  WHERE (\"users\".\"growth\" BETWEEN 0 AND 200 AND \"users\".\"email\" ILIKE 'vany%')"

感谢大家的帮助!

票数 1
EN

Stack Overflow用户

发布于 2011-09-07 22:27:46

查看"squeel“方法,这是0.9.0中的新特性。添加它就是为了支持这类事情。它为你提供了一种简单的方法来编写一段Squeel DSL,而无需将其实际附加到"where“、"join”等。

您可能还想考虑将此逻辑封装在模型的筛选器中。

代码语言:javascript
复制
class User < ActiveRecord::Base
  sifter :my_sifter do |growth_range, min_rating, email_start|
    growth.in(growth_range) & rating.gt(min_rating) & email.matches("#{email_start}%")
  end
end

User.where{sift :my_sifter, 0..200, 50, 'vany'}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7302417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档