2017-07-30 106 views
0

我試圖通過標籤搜索,它工作正常。但之後,我開始使用gem will_paginate的分頁,我不能這樣做,因爲我得到這個錯誤:未定義的方法`total_pages'爲#<Advertisement :: ActiveRecord_Relation:0x007fe4cdd7df98>

undefined method 'total_pages' for #<Advertisement::ActiveRecord_Relation:0x007fe4cdd7df98> 

但是如果我搜索它工作正常未知的標籤(顯示在指數廣告的空列表頁)。

advertisemts_controller.rb

class AdvertisementsController < ApplicationController 
    before_action :authenticate_user! 
    before_action :set_advertisement, only: %i[edit update destroy] 

    def index 
    @advertisements = Advertisement.paginate(page: params[:page], 
    per_page: 2) 
    end 

    def show 
    @advertisement = Advertisement.find(params[:id]) 
    end 

    def new 
    @advertisement = Advertisement.new 
    end 

    def create 
    @advertisement = Advertisements::Create.call(advertisement_params) 

    if @advertisement.errors.blank? 
     redirect_to advertisement_path(@advertisement), 
       notice: 'The advertisement was successfully added.' 
    else 
     render action: 'new' 
    end 
    end 

    def update 
    if @advertisement.update(advertisement_params) 
     redirect_to @advertisement, notice: 'Advertisement was 
              successfully updated.' 
    else 
     render :edit 
    end 
    end 

    def destroy 
    @advertisement.destroy 
    redirect_to advertisements_path, notice: 'Advertisement was 
    successfully destroyed.' 
    end 

    private 

    def set_advertisement 
    @advertisement = current_user.advertisements.find(params[:id]) 
    end 

    def advertisement_params 
    params 
     .require(:advertisement) 
     .permit(:title, :description, :user_id, :tags) 
     .merge(user_id: current_user.id) 
    end 
end 

search_queries_controller.rb

class SearchQueriesController < ApplicationController 
    def search_by_tag 
    @advertisements = Advertisement.find_by_tags(tags_params) 

    render 'advertisements/index' 
    end 

    private 

    def tags_params 
    params.fetch(:tags, '') 
    end 
end 

advertisement.rb

class Advertisement < ApplicationRecord 
    has_many :advertisement_tags, dependent: :destroy 
    has_many :comments 
    has_many :tags, through: :advertisement_tags 
    belongs_to :user 

    validates :title, 
      :description, 
      presence: true 

    def self.find_by_tags(tags) 
    Advertisement.joins(:tags).where('tags.tag_name IN (?)', 
             tags.split(/[\s,']/)) 
    end 
end 

我不知道如何解決這個問題,我使用ruby-2.3.4rails-5.1.2will_paginate-3.1

回答

0

這是因爲

def search_by_tag 
    @advertisements = Advertisement.find_by_tags(tags_params) 

    render 'advertisements/index' 
end 

不叫上關係paginate方法,但呈現其採用分頁的視圖。

您甚至可能會注意到Advertisement.all.paginate(page: 1).total_pages有效,但Advertisement.all.total_pages沒有。

喜歡的東西

def search_by_tag 
    @advertisements = Advertisement 
    .find_by_tags(tags_params) 
    .paginate(page: 1, per_page: 2) 

    render 'advertisements/index' 
end 

應該解決這個問題

+0

謝謝!現在它工作正常 –

相關問題