2017-07-30 103 views
1

我有一個基於Rails 5的JSON API。我有一個方法爲一個特定的公司帶來了所有產品的列表,我想分頁以便不要全部顯示數據一次。爲此,我遇到了兩個寶石,分別是will_paginateapi-pagination。 運行bundle install並重新啓動服務器後,我仍然發現了以下錯誤:Rails 5:NoMethod錯誤 - 未定義的方法分頁

NoMethodError (undefined method `paginate' for #<Api::V1::ProductsController:0x007fb25404db30>) 

產品控制器:

require 'roo' 
class Api::V1::ProductsController < ApplicationController 
    respond_to :json 

    def index 
    comp_id = params[:company_id] 
    cat_id = params[:category_id] 
    if comp_id 
     if comp_id && cat_id 
     product = Product.where(:company_id => comp_id, :category_id => cat_id) 
     else 
     product = Product.where(:company_id => comp_id) 
     end 
     paginate json: product, status: 200 
    else 
     render json: { errors: "Company ID is NULL" }, status: 422 
    end 
    end 
end 

Gemfile.rb

source 'https://rubygems.org' 

git_source(:github) do |repo_name| 
    repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/") 
    "https://github.com/#{repo_name}.git" 
end 


# Bundle edge Rails instead: gem 'rails', github: 'rails/rails' 
gem 'rails', '~> 5.0.2' 
# Use mysql as the database for Active Record 
gem 'mysql2', '>= 0.3.18', '< 0.5' 
# Use Puma as the app server 
gem 'puma', '~> 3.0' 
# Use SCSS for stylesheets 
gem 'sass-rails', '~> 5.0' 
# Use Uglifier as compressor for JavaScript assets 
gem 'uglifier', '>= 1.3.0' 
# Use CoffeeScript for .coffee assets and views 
gem 'coffee-rails', '~> 4.2' 
# See https://github.com/rails/execjs#readme for more supported runtimes 
# gem 'therubyracer', platforms: :ruby 

# Use jquery as the JavaScript library 
gem 'jquery-rails' 
# Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks 
gem 'turbolinks', '~> 5' 
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder 
gem 'jbuilder', '~> 2.5' 
#Devise Gem for Authentication 
gem "devise" 
#For JSON Serialization 
gem 'active_model_serializers' 
# Use Redis adapter to run Action Cable in production 
# gem 'redis', '~> 3.0' 
# Use ActiveModel has_secure_password 
# gem 'bcrypt', '~> 3.1.7' 
gem 'carrierwave' 
gem 'roo' 
#For Pagination 
gem 'will_paginate' 
gem 'api-pagination' 

group :development, :test do 
    # Call 'byebug' anywhere in the code to stop execution and get a debugger console 
    gem 'byebug', platform: :mri 
end 

group :development do 
    # Access an IRB console on exception pages or by using <%= console %> anywhere in the code. 
    gem 'web-console', '>= 3.3.0' 
    gem 'listen', '~> 3.0.5' 
    # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring 
    gem 'spring' 
    gem 'spring-watcher-listen', '~> 2.0.0' 
    # Use Capistrano for deployment 
    gem 'capistrano', group: :development 
    gem 'capistrano-rails', group: :development 
    gem 'capistrano3-puma', group: :development 
end 

# Windows does not include zoneinfo files, so bundle the tzinfo-data gem 
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby] 

有人能告訴我我要去哪裏嗎?

回答

2

嘗試確保您的ApplicationController繼承自ActionController::API而不是ActionController::Base。如果由於某種原因無法更新控制器,可以手動將Rails::Pagination模塊包含到ApplicationController中。

credits

更新:

class ApplicationController 
    include Rails::Pagination 

    ...... 
    .... 
end 
+0

大家好,我是新來的鐵軌,你能闡述關於第二點「如果你因爲某些原因無法更新您的控制器,您可以手動將Rails :: Pagination模塊包含到您的ApplicationController中。「 這怎麼辦? 類ApplicationController中:render_404 protect_from_forgery用:null_session DEF render_404 渲染JSON:{錯誤: '所請求的資源無法找到'},狀態:404 結束 結束 – Paras

+0

它的工作,謝謝 – Paras

相關問題