2013-12-08 21 views
0

我在我的Rails應用程序添加搜索到現有的Rails指數法

def index 
    @articles = if params[:user_id] 
     user = User.find(params[:user_id]) 
     user.articles.page(params[:page]).per_page(5) 
    else 
     @articles = current_user.articles.page(params[:page]).per_page(5) 
    end 
    end 

該指數的方法,讓我由一個用戶使用,如「/用戶/ 1 /篇」的路線限制的帖子.. 。都好......

但我也想在文章內容中添加簡單單過濾器,所以我可以限制與這樣的路的物品:

/用戶/ 1 /用品/富 和 /articles/foo

其中foo是在文章內容字段上進行搜索。有很多關於添加搜索的教程,但我無法弄清楚如何使它們與現有的方法一起工作。另外,我不需要搜索表單或單獨的搜索路徑。

+0

你'else'不應該包含'@文章='。把'@articles = if ...'放在哪個分支執行的結果將被分配給'@ articles'。你基本上已經寫過別人來做'@articles = @articles = current_user ....'。 – meagar

+0

好的。謝謝! –

回答

1

您的代碼包含對「current_user」方法的引用。你正在使用Devise或其他方法進行身份驗證?如果是這樣的話,你應該有一個before_filter用於:authenticate!在你的控制器的頂部。一旦你有了代碼,你可以在你的動作中使用「current_user」(即索引方法)。

class YourController < ActionController::Base 
    before_filter :authenticate! 

    def index 
    if params[:search_term] 
     @articles = current_user.articles.where('content like ?', "%#{params[:search_term]}%").page(params[:page]).per_page(5) 
    else 
     @articles = current_user.articles.page(params[:page]).per_page(5) 
    end 
    end 

另外,如果你想在傳遞搜索字詞,作爲URI的一部分,你需要一個路由添加到您的routes.rb

get "users/contents/:search_term" => "users#index", as: :users_contents 
+0

我會補充說,這隻會做一個簡單的搜索,看看文章內容是否包含完整的搜索條件參數。 「foo」將匹配「傻瓜」,「上下」不匹配「上下」等。這幾乎是最低限度的搜索功能,並且存在更好,更強大和更高性能的方法。根據情況,這可能會或可能不夠好。 –

+0

你說得對,@np。你可以使用諸如Lucene/Solr之類的東西。有一個稱爲「太陽黑子」的寶石,可讓您輕鬆使用Solr實施。 –