You can write:
def self.search(search)
if search
any_of({name: /#{search}/i}, {hobby: /#{search}/i})
end
end
That will give you all objects that include this value, with ignoring case-sensitive.
About adding search by date range. Send to your controller an additional value - for example ~ search_to.
def index
@parents = if params[:search]
Parent.search(params[:search], params[:search_to]) # when searching name/hobby, params[:search_to] will be nil
else
Parent.all
end
end
Your search function:
def self.search(search, search_to)
if search && search_to
where(:born => {'$gte' => Date.parse(search),'$lt' => Date.parse(search_to)})
elsif search
any_of({name: /#{search}/i}, {hobby: /#{search}/i})
end
end
Question 3 - I don't understand what is your problem.