7

Tôi đã đăng bài này lúc đầu tiên là an issue on rails_api GitHub, nhưng hiện tại tôi đã đăng nó ở đây do không hoạt động.Sử dụng rails_admin với rails_api

Tôi đang cố gắng sử dụng rails_admin với ứng dụng API Rails 5. Tôi bao gồm các mô-đun ActionController bổ sung cho đến điểm mà tôi có thể có một bảng điều khiển rails_admin hoạt động hoặc các yêu cầu API làm việc. Vấn đề dường như là rails_admin phụ thuộc vào ActionView::Layouts, mà sau khi đưa vào gây ra sự cố cho các yêu cầu API.

Gemfile:

gem 'rails', '>= 5.0.0.beta3', '< 5.1' 
... 
gem 'rack-pjax', github: 'afcapel/rack-pjax' 
gem 'remotipart', github: 'mshibuya/remotipart' 
gem 'kaminari', github: 'amatsuda/kaminari', branch: '0-17-stable' 
gem 'rails_admin', github: 'sferik/rails_admin' 

tôi cấu hình ứng dụng của tôi sử dụng ActionDispatch::Flash:

module MyApp 
    class Application < Rails::Application 
    ... 
    config.middleware.use ActionDispatch::Flash 
    end 
end 

I configured extra modules for Rails API, ApplicationController:

class ApplicationController < ActionController::API 
    include Knock::Authenticatable 
    include Pundit 

    # RailsAdmin support 
    include AbstractController::Helpers 
    include ActionController::Flash 
    include ActionController::RequestForgeryProtection 
    include ActionController::MimeResponds 
    include ActionController::HttpAuthentication::Basic::ControllerMethods 
    include ActionView::Layouts 
end 

Với những thay đổi bảng điều khiển Rails quản lý có vẻ chạy tốt . Tuy nhiên, khi tôi đang cố gắng để truy cập vào các nguồn tài nguyên JSON trong ứng dụng của tôi, các lỗi sau được ném:

Error: 
BookingsControllerTest#test_should_get_index: 
ActionView::MissingTemplate: Missing template bookings/index, application/index with {:locale=>[:en], :formats=>[:json], :variants=>[], :handlers=>[:raw, :erb, :html, :builder, :ruby, :haml]}. Searched in: 
    * "/Users/richard/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/bundler/gems/rails_admin-355dc80f8a20/app/views" 

Các mã kiểm tra (cũng đã cố gắng thêm format: :json):

class BookingsControllerTest < ActionController::TestCase 
    test 'should get index' do 
    get :index 

    assert_response :success 
    end 
end 

Đây là bộ điều khiển mã:

class BookingsController < ApplicationController 
    def index 
    @bookings = find_bookings 
    render json: @bookings, include: ['customer', 'client'], meta: meta 
    end 
end 

này chỉ xảy ra sau khi tôi bao gồm các module ActionView::Layouts trong top đẳng ActionController::API để hỗ trợ Rails quản trị.

+0

gì là trong 'bạn BookingsControllerTest'? Tôi nghĩ rằng nó sẽ giúp để biết, vì đó là nơi mà vấn đề là ... – Uzbekjon

+0

@Uzbekjon thêm. – richard

+0

Bạn đã thử sử dụng [ActiveModel :: Serializers] (https://github.com/rails-api/active_model_serializers) như rails-api đề xuất? – trueinViso

Trả lời

3

Nếu tôi là bạn, tôi thử cách ly API và bộ điều khiển RailsAdmin. Tôi nghĩ rằng đây phải làm việc:

class ApplicationController < ActionController::API 
    include Knock::Authenticatable 
    include Pundit 
end 

class RailsAdminCustomController < ApplicationController 
    # RailsAdmin support 
    include AbstractController::Helpers 
    include ActionController::Flash 
    include ActionController::RequestForgeryProtection 
    include ActionController::MimeResponds 
    include ActionController::HttpAuthentication::Basic::ControllerMethods 
    include ActionView::Layouts 
end 

Trong config/initializers/rails_admin.rb

RailsAdmin.config do |config| 
    # other config stuff ... 
    config.parent_controller = '::RailsAdminCustomController' 
end 

Chỉ cần kiểm tra RailsAdmin::ApplicationControllerhere, và các thiết lập cấu hình here.

0

Bạn nên có một tập tin xem json trong việc đặt vị trí này/index.json.jbuilder Và bên trong tập tin một cái gì đó này như

đặt/index.json.jbuilder

json.name @bookings.name 
json.date @bookings.date 

Đây là mẫu khác thiếu

application/index

nhưng thực sự không biết ứng dụng của bạn hoàn toàn. Vì vậy, có lẽ đó là bố cục ứng dụng bạn đã triển khai bằng cách sử dụng ActionView :: Layouts. Trong trường hợp đó, yêu cầu bạn triển khai tệp trang bố cục trong ứng dụng/chỉ mục vị trí.

LƯU Ý: Hai tệp đó trong thư mục chế độ xem.

2

Kể từ v1.0.0 (phát hành tháng 9 năm 2016), Rails Admin hiện hỗ trợ Rails 5 chế độ API thẳng ra ngoài hộp. Đá quý tự tiêm các phần mềm trung gian còn thiếu để hiển thị các khung nhìn của nó và không cần cấu hình thêm.

Links:

+0

Điều này đúng! Trong khi đó tôi đã sử dụng để cập nhật rails_admin và loại bỏ các giải pháp tùy chỉnh được đề cập ở trên. – richard

+0

Nó hoạt động cho đến khi '1.1.0' nếu tôi không sai; Tôi nhận được 'ActionController :: InvalidAuthenticityToken (ActionController :: InvalidAuthenticityToken):' bây giờ với Rails 5.1.2 và rails_admin 1.2 –

+0

Đúng vậy. Có một vấn đề mở với điều này mà tôi mô tả [ở đây] (http://www.carlosramireziii.com/how-to-use-rails-admin-with-a-rails-5-api-application.html#comment-3399871556) –

Các vấn đề liên quan