Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails 3查询帮助_Ruby On Rails_Ruby_Ruby On Rails 3_Activerecord - Fatal编程技术网

Ruby on rails Rails 3查询帮助

Ruby on rails Rails 3查询帮助,ruby-on-rails,ruby,ruby-on-rails-3,activerecord,Ruby On Rails,Ruby,Ruby On Rails 3,Activerecord,如何在查询中使用LIKE?我之所以要这样做,是因为我有一个查询,它会检查表单类型和状态是否正确,但我希望它不区分大小写。这是我的 @fields = Field.where(:form_type => 1, :state => "Alaska") 另外,我如何使其在表单类型=1或表单类型=*仍返回结果的情况下运行?您必须使用以下格式: @fields = Field.where(:form_type => 1).where("state LIKE 'Alaska'") 如果

如何在查询中使用LIKE?我之所以要这样做,是因为我有一个查询,它会检查表单类型和状态是否正确,但我希望它不区分大小写。这是我的

@fields = Field.where(:form_type => 1, :state => "Alaska")

另外,我如何使其在
表单类型=1或表单类型=*
仍返回结果的情况下运行?

您必须使用以下格式:

@fields = Field.where(:form_type => 1).where("state LIKE 'Alaska'")

如果希望它不区分大小写,并且

@fields = Field.where(:form_type => [1,3]).where("LOWER(state) = 'alaska'")
@fields = Field.where{(form_type.in [1,2,3]) & (state =~ 'Alaska'")} 
或者,如果你喜欢大喊大叫(谁不喜欢偶尔大喊大叫呢?)


单个的
调用与AND结合在一起,获得一致的大小写行为的最可靠方法是自己动手。

如果您不喜欢在代码中编写原始SQL,但希望在查询中使用
like
子句,那么
squel
gem非常好

我将gem与MySQL和PostreSQL一起使用,它生成正确的SQL(比如MySQL和ILIKE)。您使用squel查询的结果如下所示:

@fields = Field.where(:form_type => [1,3]).where("LOWER(state) = 'alaska'")
@fields = Field.where{(form_type.in [1,2,3]) & (state =~ 'Alaska'")} 

我可以这样做吗@fields=Field.where(“form\u type=?或form\u type=?,1,*)。where(“类似于‘阿拉斯加’的州”)您是使用星号表示“任何表单类型”,还是*是它的实际有效值?不能保证LIKE不区分大小写。MySQL的LIKE通常不区分大小写,但PostgreSQL的LIKE不会(PostgreSQL为不区分大小写的匹配提供了一个ILIKE运算符)。这不是问题。但是你能帮我解决我遇到的OR问题吗?我如何才能查询“获取等于1或*的表单类型,其中州是阿拉斯加?你只需要说
。WHERE(:form\u type=>[1,*”)。WHERE(“类似于‘阿拉斯加’的州”)
是的,阿拉斯加部分不支持区分大小写。有什么建议吗?谢谢。您知道我如何查询表单类型是否等于1或3吗?