2012-06-16 36 views
0

这应该很简单,但我不能算出语法。如何使用OR语句创建Active Record选择查询?

我有一个AR查询

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

,我想一个OR语句添加到

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

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

回答

1

正确的语法是:

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

块内的代码仅仅是一个Ruby表达式,需要返回一个布尔结果,所以你可以使用逻辑与操作&&来表示逻辑“表名不是“schema_migrations”和表名是不是“pg_search_documents””

也许一个简单的表达了同样的逻辑方法是减去要筛选出这样的表名的数组:

ActiveRecord::Base.connection.tables - ['schema_migrations', 'pg_search_documents'] 
+0

因为他要求的OR,它应该是一个“||”而不是“&&”? –

+0

我起初以为同样的事情,但我不认为这是意图。说“表名不是x或y”在逻辑上等同于“表不是y并且表不是y “ – Steve

+0

woops。我错过了你的代码中的刘海。我的道歉:P –

1

您可以使用与阵列include?一起拒绝模式,因为它可以很容易地多个表添加到拒绝列表..

ActiveRecord::Base.connection.tables.reject do |t| 
    %w(schema_migrations pg_search_documents).include?(t) 
end 
+0

感谢kandadaboggu,这看起来像它会工作,并且是一个非常可读的格式。现在我正在使用Steve的解决方案,但是当我重新构建并清理我的代码时,可能会切换到此状态:) –

相关问题