X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/80be122d6b73044f5e3f740b5c38a38d3b3f79d7..5c0e4c6b87b263c5b08d1c1197876497e58863a5:/services/api/app/models/arvados_model.rb diff --git a/services/api/app/models/arvados_model.rb b/services/api/app/models/arvados_model.rb index 4f2aa72161..4e406de9d5 100644 --- a/services/api/app/models/arvados_model.rb +++ b/services/api/app/models/arvados_model.rb @@ -45,6 +45,31 @@ class ArvadosModel < ActiveRecord::Base end.compact end + # searchable? indicates whether a model is subject to full-text + # search through the workbench. Models which include data that is + # interesting to a full-text search (e.g. Collection, Specimen, Trait) + # should override this to return 'true'. + def self.searchable? + false + end + + # search all "searchable" columns of this table for query_str. + def self.search_for_user(user, query_str) + return [] unless self.searchable? + ilikes = [] + ilike_params = [] + self.searchable_columns.each do |column| + ilikes << "#{table_name}.#{column} ilike ?" + ilike_params << "%#{query_str}%" + end + if ilikes.empty? + return [] + else + query_conditions = [ ilikes.join(' or ') ] + ilike_params + return self.readable_by(user).where(query_conditions) + end + end + def eager_load_associations self.class.columns.each do |col| re = col.name.match /^(.*)_kind$/