2013-01-04 87 views
0

我试图通过genre_id这是Communities表中的列来限制结果。
但在communities_controller中的行结束说错误。
为什么?我怎样才能解决这个问题?如何限制搜索结果?

communities_controller.rb

 @search = Community.search do 
      fulltext params[:search] 
      paginate :page => params[:page], :per_page => 5 
     end 

     @communities = @search.results 

     @communities = @communities.find_by_genre_id(params[:genre]) 
+0

我的猜测是@communities不是活动的记录,这意味着你不能做就可以了“find_by_genre_id”,这很可能是它为什么失败。 – dmoss18

+0

我该如何限制所写的标准呢? – cat

+1

你在用什么来搜索?一些宝石或什么? “@ search.results”是一个数组吗? –

回答

1

你应该看这个视频:http://railscasts.com/episodes/278-search-with-sunspot

它会帮助你。

这里是他使用的示例代码: 型号:article.rb

searchable do 
    text :name, :boost => 5 
    text :content, :publish_month 
    text :comments do 
    comments.map(&:content) 
    end 
    time :published_at 
    string :publish_month 
end 

def publish_month 
    published_at.strftime("%B %Y") 
end 

搜索算法:

@search = Article.search do 
    fulltext params[:search] 
    with(:published_at).less_than(Time.zone.now) 
    facet(:publish_month) 
    with(:publish_month, params[:month]) if params[:month].present? 
    end 
    @articles = @search.results 

我不熟悉的黑子,但它看起来像你的错误(无法识别字段)可通过在您的模型中包含genre_id来解决,如下所示:

searchable do 
    integer :genre_id 
    ... 
end 

所以,你的新的搜索看起来是这样的:

@search = Community.search do 
    fulltext params[:search] 
    with(:genre_id, params[:genre_id]) 
    paginate :page => params[:page], :per_page => 5 
end 
+0

谢谢!这是完美的答案 – cat