【问题标题】:Can anyone explain me this code in ruby?谁能用红宝石解释我这段代码?
【发布时间】:2014-04-13 22:56:17
【问题描述】:

谁能解释一下这段代码背后的logic

def self.find_first_by_auth_conditions(warden_conditions)
    conditions = warden_conditions.dup
    where(conditions).where(["lower(username) = :value OR lower(email)
    = :value", { :value => signin.downcase }]).first
end

我是ruby/rails community 的新手,我无法理解该函数返回 的内容以及该函数的总体功能?

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    返回的是一个活动记录关系——在这种情况下,是一条记录。因为该方法以self 开头,所以它是一个类方法,这意味着它不会对单个实例进行操作,而是“代表整个类”。 where,当像这样使用 bare 时,暗示它对 self 进行操作,这又是类。

    简短回答:它返回该类表示的表中的第一条记录,它与传递的 SQL 条件以及您在条件之后看到的授权条件相匹配。

    【讨论】:

      【解决方案2】:

      这似乎是 rails activerecord 模型的一部分。

      它是一个类方法,它返回满足给定条件的第一条记录,提供为:

      • warden_conditions
      • 小写的用户名或电子邮件必须等于 signin.downcase

      对应的 SQL 应该是

      SELECT * FROM items WHERE conditions_to_sql AND lower(username) = a_value OR lower(email) = a_value limit 1
      

      【讨论】:

      • 谢谢,你能解释一下这部分代码吗? where(conditions).where(["lower(username) = :value OR lower(email) = :value", { :value => signin.downcase }]).first
      • @theJava 我刚刚做了,where 采用哈希或类似 SQL 的参数。链接两个wheres 执行逻辑AND。结果在我提供的 SQL 等效项中进行了描述
      • 我确实得到了 sql 查询,但有些我如何缺少代码逻辑。它不应该是从项目中选择条件。
      • where({a: 1, b: 2}) 转换为 WHERE a = 1 AND b = 2。此方法的作用是获取满足warden_conditions 条件的记录以及usernameemail 的记录。
      • where(["attribute_1 = :a OR attribute_2 = :a", { a: 123 }]) 转换为 WHERE attribute_1 = 123 OR attribute_2 = 123。这是一种无需太多重复即可多次向 ActiveRecord 查询提供变量的方法
      猜你喜欢
      • 2011-02-11
      • 1970-01-01
      • 2011-09-09
      • 2014-08-31
      • 1970-01-01
      • 1970-01-01
      • 2017-04-22
      • 1970-01-01
      相关资源
      最近更新 更多