# encoding: utf-8 # Trustie - education management software # Copyright (C) 2013-2014 class StoresController < ApplicationController layout 'base_stores' def search name = params[:name] ||= '' (redirect_to stores_path, :notice => l(:label_sumbit_empty);return) if name.blank? result = find_public_attache name @searched_attach = paginateHelper result @result_all_count = result.count; end def find_public_attache keywords # StoresController#search 将每条文件都查出来,再次进行判断过滤。---> resultSet.to_a.map # 此时内容不多速度还可,但文件增长,每条判断多则进行3-4次表连接。 # 现在还木有思路 药丸 resultSet = Attachment.where("attachments.container_type IS NOT NULL AND filename LIKE :like ", like: "%#{keywords}%"). reorder("created_on DESC") # result = resultSet.to_a.dup # resultSet.to_a.map { |res| # if(res.container.nil? || # (res.container.class.to_s=="Project" && res.container.is_public == false) || # (res.container.has_attribute?(:project) && res.container.project.is_public == false) || # (res.container.class.to_s=="HomeworkAttach" && res.container.bid.reward_type == 3) || # false # ) # result.delete(res) # end # } # result end LIMIT = 12 unless const_defined?(:LIMIT) def index @projects_attach = project_classification(0).take(LIMIT) @courses_attach = Attachment.includes(:course).where("courses.is_public = ?", 1). where(container_type: 'Course'). limit(LIMIT) # @projects_attach = Attachment.includes(:project).where("projects.project_type=? AND projects.is_public = ?", 0, 1). # reorder("#{Attachment.table_name}.downloads DESC"). # limit(LIMIT) # @courses_attach = Attachment.includes(:project).where("projects.project_type=? AND projects.is_public = ?", 1, 1). # reorder("#{Attachment.table_name}.downloads DESC"). # limit(LIMIT) # 悲剧 下面竞赛里没文件 # @homeworks_attach = Attachment. # joins("LEFT JOIN homework_attaches ON homework_attaches.id=attachments.container_id # LEFT JOIN bids ON homework_attaches.bid_id=bids.id"). # where("container_type = 'HomeworkAttach' AND bids.reward_type <> 3"). # reorder("downloads DESC"). # limit(LIMIT) @homeworks_attach = join_tools_project Message, 0 @memos_attach = Attachment.where("container_type = 'Memo'"). reorder("downloads DESC"). limit(LIMIT) @attach_array = Array.new @attach_array.push(@projects_attach, @courses_attach, @homeworks_attach, @memos_attach) @str_arr = [ l(:label_project_deposit), l(:label_course_practice), l(:label_borad_project), #l(:label_contest_innovate), l(:label_forum) ] end private def project_classification project_type=0 # pro_attach = Attachment.joins("LEFT JOIN projects ON attachments.container_id = projects.id"). # where("attachments.container_type='Project' AND projects.is_public=1 AND projects.project_type=#{project_type}"). # reorder("downloads DESC"). # limit(LIMIT) pro_attach = join_tools_project Project, project_type doc_attach = join_tools_project Document, project_type issue_attach = join_tools_project Issue, project_type mess_attach = []#join_tools_project Message, project_type news_attach = join_tools_project News, project_type vers_attach = join_tools_project Version, project_type wiki_attach = join_tools_project WikiPage, project_type tmp = pro_attach tmp = pro_attach+doc_attach+issue_attach+mess_attach+news_attach+vers_attach+wiki_attach tmp.sort { |a, b| b.downloads <=> a.downloads } end def join_tools_project tableName, project_type=0 Attachment.joins(str_join_table(tableName)). where("attachments.container_type='#{tableName.to_s}' AND projects.is_public=1 AND projects.project_type=#{project_type}"). reorder('downloads DESC'). limit(LIMIT) end def str_join_table tableClass case tableClass.to_s when 'Project' "LEFT JOIN projects ON attachments.container_id = projects.id" when 'Document', 'Issue', 'Version', 'News' # 连接子表即有 project_id 字段,即两层连接 "LEFT JOIN #{tableClass.table_name} ON attachments.container_id = #{tableClass.table_name}.id LEFT JOIN projects ON #{tableClass.table_name}.project_id = projects.id" when 'Message' # 三层连接 "LEFT JOIN #{tableClass.table_name} ON attachments.container_id = #{tableClass.table_name}.id LEFT JOIN boards ON boards.id = #{tableClass.table_name}.board_id LEFT JOIN projects ON boards.project_id = projects.id" when 'WikiPage'# 三层连接 "LEFT JOIN #{tableClass.table_name} ON attachments.container_id = #{tableClass.table_name}.id LEFT JOIN wikis ON wikis.id = #{tableClass.table_name}.wiki_id LEFT JOIN projects ON wikis.project_id = projects.id" else end end end