我正在使用Rails3,ActiveRecord
只是想知道如何用OR语句而不是AND来链接范围.
例如
Person.where(:name => "John").where(:lastname => "Smith")
Run Code Online (Sandbox Code Playgroud)
这通常会返回name ='John'和lastname ='Smith',但我想:
name ='John'或lastname ='Smith'
activerecord ruby-on-rails ruby-on-rails-3 rails-activerecord
我知道有三个主要的符号为whereActiveRecord方法提供参数:
指定and的where方法是直截了当:
# Pure String notation
Person.where("name = 'Neil' AND age = 27")
# Array notation
Person.where(["name = ? AND age = ?", 'Neil', 27])
# Hash notation
Person.where({name: "Neil", age: 27})
Run Code Online (Sandbox Code Playgroud)
or为这个相同的where方法指定是为了哈希语法.可能吗?
# Pure String notation
Person.where("name = 'Neil' OR age = 27")
# Array notation
Person.where(["name = ? OR age = ?", 'Neil', 27])
# Hash notation DOESN'T WORK
Person.where({name: "Neil" OR age: 27})
Run Code Online (Sandbox Code Playgroud) activerecord ruby-on-rails ruby-on-rails-4 rails-activerecord ruby-on-rails-5
我想抓住所有提供电子邮件的用户或者名字和姓氏.例如:
users = User.where(:first_name => "James", :last_name => "Scott")
Run Code Online (Sandbox Code Playgroud)
这将返回所有具有名字"James"和"Scott"的用户.
users = User.where(:email => "james@gmail.com")
Run Code Online (Sandbox Code Playgroud)
这将返回用户的电子邮件为"james@gmail.com".
有没有办法做一个where子句来返回具有相同名字和姓氏的用户以及具有在一个where查询中匹配的电子邮件的用户,或者我是否需要在2个单独的where子句中进行合并.
我目前有两个活跃的记录查询,我想将它们组合在一起
joins("join relationships ON user_id = followed_id").
where("follower_id = #{user.id}")
和
where(:user_id => user.id)
基本上我希望第二个的结果与第一个类似于UNIONSQL中的语句.可以用这种方式在ActiveRecord中完成吗?
我更喜欢使用union而不是必须连接followed_id字符串中的所有s并使用INsql中的子句.
有任何想法吗?
-----编辑------我正在寻找一种方法来使用延迟加载
我正在寻找一个ActiveRecord查询,这就是我在下面的内容.不幸的是你不能像这样使用OR.什么是最好的执行方式? category_ids是一个整数数组.
.where(:"categories.id" => category_ids).or.where(:"category_relationships.category_id" => category_ids)
Run Code Online (Sandbox Code Playgroud) 我的问题类似于这个,但没有一个答案解决我的具体问题.
我想找到这样的东西:
conditions = {first_name: @search OR last_name: @search}
Stuff.where( conditions )
Run Code Online (Sandbox Code Playgroud)
显然,这种语法无效,但这是我能想到的最简单的方式来展示我想做的事情.我想在复杂/复合条件下使用更干净的哈希语法.
我知道你可以用这样的"纯字符串条件"手工写出来Stuff.where("first_name=#{@search} OR last_name=#{@search}") ......但这不是我想知道的.
更新看起来你可以对这样的数组执行OR : Stuff.where( some_column: ["option1", "option2"]). 这非常有用,但它并不能解决我的问题,因为我需要将OR应用于不同的key = value对... key=value OR key=value而不是key=value OR value.
Update2我不想使用SQL字符串的原因是因为我需要在几个部分中构建查询,而我不知道如何在仍然转义插入的变量时执行此操作.我没有测试过,但我认为这不会起作用:
conditions = ["(project_id=? AND sent_to_api=1)", @project_id]
conditions = conditions + ["first_name=? OR last_name=?", @search, @search]
Stuff.where( conditions )
Run Code Online (Sandbox Code Playgroud)
希望这是有道理的.有没有办法用SQL字符串语法做我需要的东西,同时仍然保留Rails的内置SQL转义?
可能真的很容易,但我无法在线查找关于此的文档我在Ruby中有两个activerecord查询,我想通过OR运算符连接在一起
@pro = Project.where(:manager_user_id => current_user.id )
@proa = Project.where(:account_manager => current_user.id)
Run Code Online (Sandbox Code Playgroud)
我是红宝石的新手,但我自己尝试使用||
@pro = Project.where(:manager_user_id => current_user.id || :account_manager => current_user.id)
Run Code Online (Sandbox Code Playgroud)
这不起作用,所以1.我想知道如何在Ruby和2中实际执行此操作.如果那个人也可以在这样的ruby语句中让我对布尔语法有所了解.例如AND,OR,XOR ......
我正在尝试合并两个范围或向现有范围添加更多内容。
scope :public_bids, -> {
where(status: [Status::ACCEPTED, Status::OUTBID, Status::SOLD, Status::NO_SALE],
bid_type: [BidType::MANUAL, BidType::AUTO, BidType::LIVE])
scope :outbid_maxbids, -> {
where(status: Status::OUTBID, bid_type: BidType::MAXBID)
Run Code Online (Sandbox Code Playgroud)
我无法确定如何将OR它们组合在一起或合并到一个范围中。有什么建议/指导吗?我更希望将它们合并到一个范围中。
基本上,我有点困在这里。我正在使用Rails3.xx。我现在使用的代码如下
@email_reminder = ToDo.where(:reminder => true, :deadline_date =< Date.today)
Run Code Online (Sandbox Code Playgroud)
上面的代码显然不起作用。我到处搜索,但是几乎所有解决方案都是Rails 2.xx解决方案。如果今天的日期已过或截止日期是最后的日期,查找所有“电子邮件提醒”的最有效方法是什么?
(不必与上面使用的方法类似,但是如果您提供使用类似方法的方法,则将有所帮助)
提前致谢
在Rails应用程序中,使用ActiveRecord where方法检查属性是零还是空的最简洁方法是什么?
这有效,但似乎应该有一个更好的,内置的方式来做到这一点:
@items = Item.where :context => nil || ''
Run Code Online (Sandbox Code Playgroud)
当您的搜索包含"where"等词语时,Google-fu很难做到很多.