小编0ll*_*cks的帖子

Rails:为什么where(id:objects)有效?

我有以下声明:

Customer.where(city_id: cities)
Run Code Online (Sandbox Code Playgroud)

这导致以下SQL语句:

SELECT customers.* FROM customers WHERE customers.city_id IN (SELECT cities.id FROM cities...
Run Code Online (Sandbox Code Playgroud)

这是预期的行为吗?它在某处记录了吗?我不会使用上面的Rails代码,而是使用以下之一:

Customer.where(city_id: cities.pluck(:id))
Run Code Online (Sandbox Code Playgroud)

要么

Customer.where(city: cities)
Run Code Online (Sandbox Code Playgroud)

这导致完全相同的SQL语句.

ruby-on-rails

3
推荐指数
2
解决办法
62
查看次数

Ruby/Rails 类变量何时初始化?

我目前面临的问题是,我的所有对象都使用具有“相同”初始值的实例变量,而我只读了这个。

def initialize
    @available_ids = read_only_value
end
Run Code Online (Sandbox Code Playgroud)

但棘手的事情来了:这个“read_only_value”是从 API 检索的。为了简单起见,我们假设该值是一个整数数组,并且每月更改一次。

但我不想通过每次创建对象时检索值来拒绝 API。如果我改用类变量怎么办?

class Foo
   @@available_ids = read_only_value
   def initialize
      @available_ids = @@available_ids //weird but let's go with it
   end
end
Run Code Online (Sandbox Code Playgroud)

我认为这将解决 API 垃圾邮件的问题,因为它仅在变量初始化后执行...

但这种情况什么时候发生呢?当我启动 Rails 应用程序时,当我创建第一个对象时?它会更新吗?由于该值每月更改一次,我如何获取更新?

PS:我想最好的选择是将 ids 保存在数据库中,并偶尔或按需检查 ids。

ruby initialization ruby-on-rails class-variables

1
推荐指数
1
解决办法
913
查看次数