2014-09-05 71 views
-1

我有一個Project模型有許多UserStories。我想要的是讓用戶通過title,descriptionUserStory#name在其項目中的個人資料中進行搜索。我成功搜索了titledescripion。有關如何通過UserStory#name進行搜索的任何幫助?導軌搜索

這是我在views/profile/index形式:

<%= form_tag "profile/", :method => :get do %> 
    <%= text_field_tag :search %> 
    <%= submit_tag "Search"%> 
<% end %> 

這裏是我的個人資料/控制器index行動:

def index 
    if params[:search]  
    @projects = current_user.projects 
        .where('title LIKE ? or description LIKE ?', 
          "%#{params[:search]}%", "%#{params[:search]}%") 

    current_user.projects.each do |project| 
     if (project.user_stories) 
     project.user_stories.each do |story| 
      if story.name.include? params[:search] 
      @projects << story.project 
      end 
     end 
     end 
    end 

    @projects = @projects.page(params[:page]).per_page(4) 
    else 
    @projects = current_user.projects.order("title") 
        .page(params[:page]).per_page(4) 
    end  
end 
+0

它現在不工作,錯誤信息或只是不是你以後的數據? – Iceman 2014-09-05 21:25:24

+0

如果記錄不存在於數據庫中,它會給出一個錯誤集合「無法爲ProfileController找到'操作'顯示',即在項目標題或說明搜索中,但是在用戶故事名稱中搜索它始終不會' t工作 – 2014-09-05 21:32:37

回答

2

infused have it right;你可以在一個查詢中做到這一點。你也可以做很多簡化你的代碼。

def index 
    if params[:search] 
    values = { search: "%#{ params[:search] }%" } 

    conditions = %q{ projects.title   LIKE :search 
        OR projects.description LIKE :search 
        OR user_stories.name LIKE :search } 

    @projects = current_user.projects.joins(:user_stories) 
        .where(conditions, values) 
    else 
    @projects = current_user.projects.order(:title) 
    end  

    @projects = @projects.page(params[:page]).per_page(4) 
end 
+0

謝謝@jordan並注入。 – 2014-09-05 21:58:51

0

可以包括其他表中查詢,然後添加條件where子句:

s = "%#{params[:search]}%" 
current_user.projects.includes(:user_stories).where('title LIKE ? OR description LIKE ? OR user_stories.name LIKE ?', s, s, s) 
+0

它給出了錯誤SQLite3 :: SQLException:no such column:user_stories.name:SELECT「projects」。* FROM「projects」INNER JOIN「project_user_relations」ON「projects」。「id」=「project_user_relations」。「project_id 「WHERE」project_user_relations「。」user_id「=? AND(標題LIKE'%project title%'或說明LIKE'%project title%'或user_stories.name LIKE'%project title%')ORDER BY標題LIMIT 4 OFFSET 0 – 2014-09-05 21:41:01