2011-03-11 92 views
1

我執行搜索和我有我的SQL /發現一些困難。Rails 3 - 循環獲取集合?

基本上,我有一個喜歡的頁面,是可以獲得的收藏夾收藏有:

@favorites = current_user.votes 

在視圖中,我然後依次通過我的最愛,並且可以調用.voteable上他們得到實際的對象這是投票。這使我很難編寫搜索。

我想知道是否有可能改變我原來的集合,因此,我真的開始每次乾涸我看來,.voteable對象/幫我寫我的搜索。我不能叫current_user.votes.voteables但單項可以這樣做current_user.votes.first.voteable

我已經嘗試是像這樣一個循環:

@favorites = current_user.votes.each {|vote| vote.voteable } 

哪項是錯誤的,而且我我只是再次得到我的選票,而不是實際的可投票對象。我只是想知道是否有辦法讓這些可投票通過我這樣的投票循環。

任何指針將幫助,謝謝。

編輯:

擴展了我的意思被搜索:

我建立在搜索自我模型的方法,這裏有一個例子:

def self.search(search) 
    if search 
     where('title LIKE ?', "%#{search}%") 
    else 
     scoped 
    end 
    end 

我通過搜索從視圖上看,採用如下形式:

<div id="search_form"> 
    <%= form_tag topic_links_path, :method => 'get', :id => "links_search" do %> 
     <%= text_field_tag :search, params[:search], :size => "35" %> 
     <%= submit_tag "Search", :name => nil %> 
    <% end %> 
    </div> 

這樣,當我在t他可以通過調用.search(params [:search])來獲取與用戶在表單中輸入的內容類似的內容。我使用vote_fu寶石來處理投票/投票。

+0

你可以展開你的意思是「搜索」?這是如何實施的?你正在寫自己的,使用寶石等? – 2011-03-11 19:05:07

回答

3

您需要使用map而不是each

@favorites = current_user.votes.map {|vote| vote.voteable } 

each簡單地遍歷元素並對其進行操作,但它並不在一個陣列格式返回結果。這就是map所做的。

在一個側面說明,您可以使用範圍搜索,而不是功能。這可能是一個小清潔劑:

scope :search, lambda{ |title| where('title LIKE ?', "%#{title}%") unless title.blank? } 
+0

你也可以使用'collect',而不是'map' - 這是一個別名,純屬個人喜好 – TALLBOY 2011-03-11 19:30:35

+0

一切現在工作就像一個魅力。我打算通過範圍進行搜索,感謝您的幫助。 – Kombo 2011-03-11 19:46:53