2012-08-23 48 views
1

美好的一天。 我的問題是^我試圖在準備好的項目上使用ransack。 它使用差異語言和will_paginage。 當前我得到在現成的應用上使用快速搜索

No Ransack::Search object was provided to search_form_for! 

當我嘗試訪問控制器的索引操作。 我應該怎樣做搜索工作?

控制器:

def index 
    if params[:set_locale] 
     redirect_to articles_path(locale: params[:set_locale]) 
    else 
     if params[:q] 
     @search = Article.search(params[:q]) 
     logger.debug '! IF 1' 
     @articles = @search.result(:distinct => true). 
      paginate page: params[:page], order: 'created_at desc', 
      per_page: 5 # load all matching records 
     else 
     logger.debug('! ELSE 2') 
     @articles = Article.paginate page: params[:page], order: 'created_at desc', 
     per_page: 5 
     end 
    respond_to do |format| 
     format.html # index.html.erb 
     format.json { render json: @articles } 
    end 
    end 
end 

更新1 是的,如果你downvote我,好吧,但你能向我解釋什麼?

更新2 和視圖

<%= search_form_for @q do |f| %> 
    <%= f.label :articles_title_start %> 
    <%= f.text_field :articles_title_start %><br /> 
    <!-- etc... --> 
    <%= f.submit :value=>'Search' %> 
<% end %> 

更新3 模型

class Article < ActiveRecord::Base 
    attr_accessible :text, :title 
    validates :title, :presence=>true,:uniqueness=>true 
    validates :text, :presence=>true 
end 

回答

1

你可以嘗試

@q = Article.paginate(:page => params[:page]).search(params[:q]) 
    @articles = @q.result(:distinct => true) 

我從來沒有使用過will_paginate,但與kaminari相同的作品與搜索

也在您的看法你有var @q和在你的控制器你有@搜索,這些將需要是一樣肯定,所以也許改變控制器

.....

@q = Article.search(params[:q]) 

if params[:q] 
    logger.debug '! IF 1' 
    @articles = @q.result(:distinct => true). 
     paginate page: params[:page], order: 'created_at desc', 
     per_page: 5 # load all matching records 
    else 

.....

+0

我試一下,謝謝! – Elmor

+0

嗯,這是一個錯誤,但固定這並沒有解決一般問題。 如果我將URL更改爲http://0.0.0.0:3000/en/articles?q=fds 我收到錯誤:未定義的方法'with_indifferent_access' – Elmor

+0

我已更新我的答案,以便@q在if語句之外定義爲它始終需要定義 –