2015-11-26 1 views
1

Mon schéma db est comme ça CampagnePagination pour deux modèles séparés dans des rails

has_many :ads 
has_many :surverys 

Enquête et Ad ont pas de relations entre eux.

Pour la liste avec je fais en page

@ads = Ad.all.page(params[:page]).per(8) 
@surveys = Survey.all.page(params[:page]).per(8) 

Mon exigence est d'obtenir une liste des deux annonces et des enquêtes à la fois.

Je dois obtenir les deux à la fois

@ad_and_surveys = 

Comment je reçois et paginate ça?

+0

On ne sait pas ce que vous entendez par '@ ad_and_surveys = '. Pourriez-vous préciser cela? – Tobias

Répondre

1

Vous pouvez utiliser will_paginate/array!

Créez un fichier config/initializers/will_paginate_array_fix.rb et ajoutez ceci:

require 'will_paginate/array' 

A votre contrôleur:

def show 
    @ad_surveys = Ad.all + Survey.all # or what ever you have 
    @ad_and_survey = @ad_surveys.paginate(page: params[:page], per_page: 5) 
end 

à vue:

<%= will_paginate @ad_and_survey %> 
0

Vous devez utiliser deux paramètres différents paginer à travers deux tables différentes en même temps:

Par exemple:

Controller:

@ads = Ad.all.page(params[:ads_page]).per(8) 
@surveys = Survey.all.page(params[:surveys_page]).per(8) 

Vue:

<%= will_paginate @ads, param_name: :ads_page %> 
<%= will_paginate @surveys, param_name: :surveys_page %> 
1

Vous pouvez le faire comme ci-dessous:

@ads = Ad.all 
@surveys = Survey.all 
sorted_array_of_ads_and_surveys = (@ads.to_a + @surveys.to_a).sort_by { |k| k["created_at"] } 
@desired_output = sorted_array_of_ads_and_surveys.page(params[:page]).per(8) 

sorted_array_of_ads_and_surveys est une combinaison de @ads et @surveys triés. Donc, vous obtenez une combinaison de publicités et d'enquêtes. Sinon, les annonces sont listées en premier, puis l'enquête ne sera pas bonne.

+0

NoMethodError (méthode non définie 'page 'pour # ): –

+0

Vous devez requérir' require' will_paginate/array'' dans votre code. Si vous utilisez paginez. Si vous utilisez 'kaminari', cela fonctionnera comme prévu. –

+0

Ok merciuuuuuuu :) –