过滤器数组结果条件为ruby on rails 3.2

时间:2012-05-22 16:37:58

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1 sunspot

我在 posts_controller.rb

中执行此操作
def index
   @search = Post.solr_search do |s|
     s.fulltext params[:search]
     s.keywords params[:search]
     s.order_by :created_at, :desc
     s.paginate :page => params[:page], :per_page => 1

   end
   @posts = @search.results
   ).page(params[:page]).per(20)
    respond_to do |format|
    format.html # index.html.erb
    format.xml  { render :xml => @posts }
    format.json { render :json => @posts }
  end 
 end

实例变量@posts是一个数组。

帖子模型有一个属性language

我希望仅使用@posts

获取数组@post.language == "en"

我正在使用mongoid odm。

我该怎么做?

谢谢!

3 个答案:

答案 0 :(得分:7)

可以说是你的答案!

@en_posts = @posts.find_all { |post| post.language == 'en' }

答案 1 :(得分:1)

问题得到解决。我已将此条件添加到太阳黑子中:

       if params[:locale].present?
        s.with(:language, params[:locale])
       else
        params[:locale] = I18n.locale
        s.with(:language, params[:locale])
       end

所以方法是:

def index
   @search = Post.solr_search do |s|
     s.fulltext params[:search]
     s.keywords params[:search]
     s.order_by :created_at, :desc
     s.paginate :page => params[:page], :per_page => 1

         if params[:locale].present?
           s.with(:language, params[:locale])
          else
           params[:locale] = I18n.locale
           s.with(:language, params[:locale])
         end

   end
   @posts = @search.results
   ).page(params[:page]).per(20)
    respond_to do |format|
    format.html # index.html.erb
    format.xml  { render :xml => @posts }
    format.json { render :json => @posts }
  end 


 end

非常感谢!

答案 2 :(得分:0)

如果您希望将其范围置于@posts下,则可以执行以下操作:

@posts.where(language: 'en')

或以通用方式

Post.where(language: 'en')