这应该很简单,但我无法弄清楚语法。
我有一个 AR 查询
ActiveRecord::Base.connection.tables.select { |t| t != 'schema_migrations' }
我想添加一个 OR 语句
ActiveRecord::Base.connection.tables.select { |t| t != 'schema_migrations' OR 'pg_search_documents' }
什么是正确的语法?谢谢!
这应该很简单,但我无法弄清楚语法。
我有一个 AR 查询
ActiveRecord::Base.connection.tables.select { |t| t != 'schema_migrations' }
我想添加一个 OR 语句
ActiveRecord::Base.connection.tables.select { |t| t != 'schema_migrations' OR 'pg_search_documents' }
什么是正确的语法?谢谢!
正确的语法是:
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']
您可以将拒绝模式与 array 一起使用include?
,因为它可以轻松地将更多表添加到拒绝列表中。
ActiveRecord::Base.connection.tables.reject do |t|
%w(schema_migrations pg_search_documents).include?(t)
end