我对 Ruby 如何执行查询感到困惑:
假设我们有两种方法:
def meet1
user = User.all
end
Run Code Online (Sandbox Code Playgroud)
每次我调用这个方法时,我都会运行一个查询,它说:
'用户负载 (18.3ms) SELECT "users".* FROM "users" INNER JOIN "roles" ON "roles"."user_id" = "users"."id" WHERE "users"."banned" = 'f' AND "roles"."description" = 'gogetter''
这意味着它查询用户...
假设我有另一种方法:
def meet2
user = User.all
user.to_sql
end
Run Code Online (Sandbox Code Playgroud)
当我调用它时,它返回了该查询的 SQL 格式:
所以我的问题是在第一种方法中执行查询,但是查询是否在第二种方法中执行?或者它只是向我显示最终结果而不执行查询,因为我从未使用过它?
我正在使用find_by_sql这个查询,它返回一个数组。我想做类似的事情Job.hongkong_jobs.where(status: true),但我不能,因为它是一个数组。
scope :hongkong_jobs, -> { find_by_sql "SELECT DISTINCT(jobs.*) FROM" + Task.near([22.275754, 114.163056], 35.17936816723013, :units => :km).joins(:job).where(jobs: {status: [:open,:new]}).to_sql.split("FROM").last.split("ORDER").first + "ORDER BY start_at ASC" }
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:如何将其转换为活动记录对象,以便我可以.where在此范围内执行操作?
我正在使用设计,因为我的rails应用程序并一直使用设计确认用户,所以他们必须在登录后确认他们的电子邮件!我想删除:confirmable并允许用户登录而不确认他们的电子邮件,我删除它并且它可以工作,但我的所有rspec都失败了,它说
undefined method `confirm!' for #<User:0x007fc06db987e8>
Run Code Online (Sandbox Code Playgroud)
没有像确认那样的方法!我该如何解决?(我不知道)甚至将我的宝石更新为3.5.8.我知道我可以跳过确认但我想删除它!谢谢!
所以基本上我的数据库中有一个ic列:ic只包含数字,但字段是一个字符串,所以人们也可以添加护照.我想写一个查询,它只显示我只有数字的ic:
SELECT applications.ic
FROM applications
WHERE applications LIKE '%[^0-9]%'
Run Code Online (Sandbox Code Playgroud)
但它起作用了!