mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-09-15 17:44:46 +08:00
Add SearchableModel to Experiment and fix children
This commit is contained in:
parent
49cd8a783d
commit
0361f006ca
3 changed files with 51 additions and 9 deletions
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue