Add SearchableModel to Experiment and fix children

This commit is contained in:
Jure Grabnar 2016-07-25 16:30:59 +02:00
parent 49cd8a783d
commit 0361f006ca
3 changed files with 51 additions and 9 deletions

View file

@ -1,5 +1,5 @@
class Experiment < ActiveRecord::Base
include ArchivableModel
include ArchivableModel, SearchableModel
belongs_to :project, inverse_of: :experiments
belongs_to :created_by, foreign_key: :created_by_id, class_name: 'User'
@ -23,6 +23,47 @@ class Experiment < ActiveRecord::Base
experiment.validates :archived_on, presence: true
end
scope :is_archived, ->(is_archived) { where("archived = ?", is_archived) }
def self.search(user, include_archived, query = nil, page = 1)
project_ids =
Project
.search(user, include_archived, nil, SHOW_ALL_RESULTS)
.select("id")
if query
a_query = query.strip
.gsub("_","\\_")
.gsub("%","\\%")
.split(/\s+/)
.map {|t| "%" + t + "%" }
else
a_query = query
end
if include_archived
new_query =
Experiment
.where(project: project_ids)
.where_attributes_like([:name, :description], a_query)
else
new_query =
Experiment
.is_archived(false)
.where(project: project_ids)
.where_attributes_like([:name, :description], a_query)
end
# Show all results if needed
if page == SHOW_ALL_RESULTS
new_query
else
new_query
.limit(SEARCH_LIMIT)
.offset((page - 1) * SEARCH_LIMIT)
end
end
def modules_without_group
MyModule.where(experiment_id: id).where(my_module_group: nil)
.where(archived: false)

View file

@ -34,8 +34,8 @@ class MyModule < ActiveRecord::Base
has_many :protocols, inverse_of: :my_module, dependent: :destroy
def self.search(user, include_archived, query = nil, page = 1)
project_ids =
Project
exp_ids =
Experiment
.search(user, include_archived, nil, SHOW_ALL_RESULTS)
.select("id")
@ -52,12 +52,12 @@ class MyModule < ActiveRecord::Base
if include_archived
new_query = MyModule
.distinct
.where("my_modules.project_id IN (?)", project_ids)
.where("my_modules.experiment_id IN (?)", exp_ids)
.where_attributes_like([:name, :description], a_query)
else
new_query = MyModule
.distinct
.where("my_modules.project_id IN (?)", project_ids)
.where("my_modules.experiment_id IN (?)", exp_ids)
.where("my_modules.archived = ?", false)
.where_attributes_like([:name, :description], a_query)
end

View file

@ -12,11 +12,12 @@ class MyModuleGroup < ActiveRecord::Base
dependent: :nullify
def self.search(user, include_archived, query = nil, page = 1)
project_ids =
Project
exp_ids =
Experiment
.search(user, include_archived, nil, SHOW_ALL_RESULTS)
.select("id")
if query
a_query = query.strip
.gsub("_","\\_")
@ -30,8 +31,8 @@ class MyModuleGroup < ActiveRecord::Base
new_query = MyModuleGroup
.distinct
.joins(:experiment)
.where("experiment.project_id IN (?)", project_ids)
.where_attributes_like(:name, a_query)
.where("my_module_groups.experiment_id IN (?)", exp_ids)
.where_attributes_like("my_module_groups.name", a_query)
# Show all results if needed
if page == SHOW_ALL_RESULTS