加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 查找属性存在的记录

发布时间:2020-12-16 20:09:34 所属栏目:百科 来源:网络整理
导读:我有一个具有用户名,电子邮件和名称的用户模型. 用户名和电子邮件需要注册,但不是名字. 查询所有填写名称的用户(即不是零)的查询是什么? 该查询应该是Rails 3.2和4.0兼容. 我正在考虑以下几点: User.where(name: present?) 解决方法 当下? present? 基本
我有一个具有用户名,电子邮件和名称的用户模型.

用户名和电子邮件需要注册,但不是名字.

查询所有填写名称的用户(即不是零)的查询是什么?

该查询应该是Rails 3.2和4.0兼容.

我正在考虑以下几点:

User.where(name: present?)

解决方法

当下?

present?基本上不是零,不是空的?

class Object
  def present?
    !blank?
  end
  def blank?
    respond_to?(:empty?) ? !!empty? : !self
  end
end

ActiveRecord条件

在Rails 4中,没有原始的sql代码就可以完成任务.

# Both lines lead to the same result:
User.where.not(name: [nil,""])
User.where.not(name: nil).where.not(name: "")

因为没有原始的sql代码,所以不必担心如果它们与每个数据库适配器一起使用.实际上,这对mysql和postgres都有效.

to_sql

如果您附加了.to_sql,例如在rails控制台中,您可以看到它们如何转换为sql查询.

# rails console

User.where.not(name: [nil,""]).to_sql
# => "SELECT "users".* FROM "users" WHERE (NOT (("users"."name" = '' OR "users"."name" IS NULL)))"

User.where.not(name: nil).where.not(name: "").to_sql
# => "SELECT "users".* FROM "users" WHERE ("users"."name" IS NOT NULL) AND ("users"."name" != '')"

进一步阅读

> [1] Rails 4 guide “ActiveRecord Query Interface”
> [2] Definition of present? on github

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读