0

这应该很简单,但我无法弄清楚语法。

我有一个 AR 查询

ActiveRecord::Base.connection.tables.select { |t| t != 'schema_migrations' }

我想添加一个 OR 语句

ActiveRecord::Base.connection.tables.select { |t| t != 'schema_migrations' OR 'pg_search_documents' }

什么是正确的语法?谢谢!

4

2 回答 2

1

正确的语法是:

ActiveRecord::Base.connection.tables.select { |t| t != 'schema_migrations' && t != 'pg_search_documents' }

块内的代码只是一个 Ruby 表达式,需要返回一个布尔结果,因此您可以使用逻辑 AND 运算符&&来表达逻辑“表名不是 'schema_migrations' AND 表名不是 'pg_search_documents'”

也许表达相同逻辑的更简单方法是减去要过滤掉的表名数组,如下所示:

ActiveRecord::Base.connection.tables - ['schema_migrations', 'pg_search_documents']
于 2012-06-16T09:19:49.097 回答
1

您可以将拒绝模式与 array 一起使用include?,因为它可以轻松地将更多表添加到拒绝列表中。

ActiveRecord::Base.connection.tables.reject do |t| 
  %w(schema_migrations pg_search_documents).include?(t)
end
于 2012-06-16T15:03:03.250 回答