2016-09-08 1 views
0

in er nächsten Code die ZeileWie mit MongoDB verschachtelt Abfrage zugeordnet und Rails

filter[:category_fields][:name] = params[:filter_category] 

es dauert nicht an Abfrage und nur zweite Filter funktioniert nicht funktioniert:

if params[:commit] == 'Filter' && (params[:filter_category] != '' || params[:filter_status] != '') 
    if !params[:filter_category].blank? 
    filter[:category_fields][:name] = params[:filter_category] 
    end 
    if !params[:filter_status].blank? 
    filter[:status] = params[:filter_status] 
    end 
    @articles = Article.where(filter).order('created_at DESC') 
else 
    @articles = Article.all.reverse 
end 

Mai Soll ich nicht alle Parameter in einem "Filter" Hash hinzufügen?

Mein MongoDB wie folgt aussieht:

{ 
    "_id" : ObjectId("57d115b3bf5918085c455ac3"), 
    "views" : 0, 
    "status" : "published", 
    "title" : "sdfSDffd", 
    "description" : "gsdfg", 
    "content" : "sdfg", 
    "category_id" : ObjectId("57d16aeebf59181133d3c35d"), 
    "updated_at" : ISODate("2016-09-08T14:28:34.257Z"), 
    "created_at" : ISODate("2016-09-08T07:39:31.757Z"), 
    "category_fields" : { 
      "name" : "sdfg" 
    }, 
    "published_on" : ISODate("2016-09-08T11:56:48.407Z") 
} 

Dank!

Antwort

0

seltsam, aber in einer anderen Form Hash-Zuordnung geschrieben geholfen:

filter.store(:category_fields, {:name => params[:filter_category]}) 

Schließlich mein Index wie folgt aussieht:

def index 
    filter = Hash.new 
    if params[:commit] == 'Filter' && (params[:filter_category] != '' || params[:filter_status] != '') 
    if !params[:filter_category].blank? 
     filter.store(:category_fields, {:name => Category.find(params[:filter_category]).name}) 
    end 
    if !params[:filter_status].blank? 
     filter.store(:status, params[:filter_status]) 
    end 
    @articles = Article.where(filter).order('created_at DESC') 
    else 
    @articles = Article.all.reverse 
    end 
end