Ruby on rails 3.1 哪里可以阻止迁移

Ruby on rails 3.1 哪里可以阻止迁移,ruby-on-rails-3.1,meta-where,squeel,Ruby On Rails 3.1,Meta Where,Squeel,在本文中,我使用循环if-else语句将条件组合为sql变量 sql={} 电子邮件以=vany%开头 sql[growth]=0..200 sql=sql&:rating>50 sql=sql&:email=~email\u以 ..... ..... User.wheresql.to_sql =>选择\users\.*自\users\WHERE\users\.\growth\介于0和200之间和\users\.\rating\>50和\users\.\email\i如“vany%” user=

在本文中,我使用循环if-else语句将条件组合为sql变量

sql={} 电子邮件以=vany%开头 sql[growth]=0..200 sql=sql&:rating>50 sql=sql&:email=~email\u以 ..... ..... User.wheresql.to_sql =>选择\users\.*自\users\WHERE\users\.\growth\介于0和200之间和\users\.\rating\>50和\users\.\email\i如“vany%” user=user.wheresql.first => 我怎样才能用同样的方法呢


感谢您的帮助

查看0.9.0中新增的“静噪”方法。它的加入正是为了支持这类事情。它只是为您提供了一种简单的方法来编写一个squel DSL块,而无需将其实际附加到where、join等

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

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'}

我用计算机解决了我的问题。我想我只是把MetaWhere代码改成了Arel,它和

t=User.arel\u表 电子邮件以=vany%开头 sql=t[:额定值].gt50 sql=t[:增长].in0..200 sql=sql.andt[:email].matchesemail\u以 User.wheresql.to_sql =>从\users\WHERE\users\中选择\users\.\growth\介于0和200之间和\users\。\email\i如“vany%”
谢谢大家的帮助

谢谢你的帮助,我已经找到了解决办法。但问题是关于MetaWhere->squel的,所以你们的答案很有用。