Tag: 吱吱声

如何在squeel中动态处理where条件?

从这个输入:{‘hear’=> 1}我需要生成此查询 Score.joins(:target_disability).where{ (target_disabilities.name == ‘hearing’) & (round(total_score) >= 1) } 从这个输入{{hearing’=> 1,’mobility’=> 2},我需要生成这个: Score.joins(:target_disability).where{ (target_disabilities.name == ‘hearing’) & (round(total_score) >= 1) | (target_disabilities.name == ‘mobility’) & (round(total_score) >= 2) } 等等… 这怎么可以概括? 因为我的输入有时会有3或4个键…有时候1 …

如何动态生成关联名称?

我正在使用Ruby on Rails 3.2.2和Squeel gem。 我有以下语句,我试图在Mixin模块中重构my_squeel_query方法(因为它被我的许多模型使用): # Note: ‘article_comment_associations’ and ‘model_as_like_article_comment_associations’ # refer to database table names. class Article < ActiveRecord::Base def my_squeel_query commenters. .where{ article_comment_associations.article_id.eq(my{self.id}) & … } end end class ModelAsLikeArticle < ActiveRecord::Base def my_squeel_query commenters. .where{ model_as_like_article_comment_associations.article_id.eq(my{self.id}) & … } end end 我的问题是我无法通过在Mixin模块中生成动态名称来重构article_comment_associations和model_as_like_article_comment_associations语句。 也就是说,如果那是一个String我可以通过使用类似”#{self.class.to_s.singularize}_comment_associations”的内容动态生成相关名称,如下所示: class Article < ActiveRecord::Base include MyModule end class […]

Squeel和rails …动态where子句

使用Squeel,在rails应用程序中,我有一个条件哈希: {‘trans’ => ‘manual’} 我最终计划进入一个数组…所以我也可以有一个运算符赋值。 [[field,operator,value][field,operator,value]] 我想使用一个模型方法,现在我省略了运算符,我只是尝试==让它工作……但是,我在下面的内容不起作用。 def self.with_conditions(conditions) joins{car}.where do conditions.map {|key,value| (key==value) }.inject(:&) end end 我也试过这个: def self.with_conditions(conditions) joins{car}.where do query = nil conditions.each do |key, value| q = (key == value) if query query &= q else query = q end end query end end 那么,我如何使用==来实现这一点,然后我最终如何使用动态运算符? 谢谢 在控制台中,我的SQL不会在任何条件下读取…例如: 在控制台中: > Timeslip.with_conditions({‘car.year’=>’1991’}) SELECT […]

使用Squeel时,是否可以有条件地在where块中添加子句?

首先,我使用Rails v3.2.9与Squeel 1.0.13,这是我正在尝试做的事情: 我想使用三种识别信息中的任何一种搜索客户 – 姓名,出生日期(dob)和社会保险号码(罪)。 结果集必须包含任何具有任何标识符的记录 – 条件的OR。 我以前在Squeel做过这个,看起来像是这样的: scope :by_any, ->(sin, name, dob){ where{(client.sin == “#{sin}”) | (client.name =~ “%#{name}%”) | (client.dob == “#{dob}”)} } 只要我提供所有标识符,这都可以正常工作。 但是,如果我只有一个名字怎么办? 以上范围导致: SELECT “clients”.* FROM “clients” WHERE (((“clients”.”sin” IS NULL OR “clients”.”name” ILIKE ‘%John Doe%’) OR “clients”.”dob” IS NULL)) 这包括sin为null的客户端集,以及dob为null的客户端集以及名为“John Doe”的请求客户端集。 因此,请尝试有条件地将where子句添加到where块。 起初,我尝试使用nil检查值? 方法: def self.by_any (sin, […]