使用 rails_admin 和 rails_api
Using rails_admin with rails_api
我最初将其发布为 an issue on rails_api GitHub,但由于不活动现在将其发布在这里。
我正在尝试将 rails_admin
与 Rails 5 API 应用程序一起使用。我包含了额外的 ActionController 模块,直到我可以拥有一个正常工作的 rails_admin 面板或工作 API 请求。问题似乎是 rails_admin 取决于 ActionView::Layouts
,包含后会导致 API 请求出现问题。
宝石文件:
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'
我将我的应用程序配置为使用 ActionDispatch::Flash
:
module MyApp
class Application < Rails::Application
...
config.middleware.use ActionDispatch::Flash
end
end
I configured extra modules for Rails API,应用程序控制器:
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
通过这些更改,Rails 管理仪表板似乎 运行 没问题。但是,当我尝试访问我的应用程序中的 JSON 资源时,抛出以下错误:
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"
测试代码(也试过加入format: :json
):
class BookingsControllerTest < ActionController::TestCase
test 'should get index' do
get :index
assert_response :success
end
end
这是控制器代码:
class BookingsController < ApplicationController
def index
@bookings = find_bookings
render json: @bookings, include: ['customer', 'client'], meta: meta
end
end
只有在我将 ActionView::Layouts
模块包含在顶层 ActionController::API
class 以支持 Rails 管理员后才会发生这种情况。
您应该在这个位置 bookings/index 有一个 json 查看文件 bookings/index。json.jbuilder
在这个文件里面有类似
的东西
bookings/index.json.jbuilder
json.name @bookings.name
json.date @bookings.date
这是另一个缺少的模板
application/index
但真的不完全了解你的应用程序。所以也许这就是您使用 ActionView::Layouts 实现的应用程序布局。在这种情况下,要求您在 application/index.
位置实现布局页面文件
注意:这两个文件位于 views 文件夹中。
如果我是你,我会尝试隔离 API 和 RailsAdmin 控制器。我认为这一定有效:
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
在config/initializers/rails_admin.rb
RailsAdmin.config do |config|
# other config stuff ...
config.parent_controller = '::RailsAdminCustomController'
end
只需检查 RailsAdmin::ApplicationController
here, and the config settings here。
截至 v1.0.0
(2016 年 9 月发布),Rails Admin 现在支持 Rails 5 API-mode 直 out-of-the-box。 gem 本身会注入缺少的中间件来呈现其视图,并且不需要额外的配置。
链接:
我最初将其发布为 an issue on rails_api GitHub,但由于不活动现在将其发布在这里。
我正在尝试将 rails_admin
与 Rails 5 API 应用程序一起使用。我包含了额外的 ActionController 模块,直到我可以拥有一个正常工作的 rails_admin 面板或工作 API 请求。问题似乎是 rails_admin 取决于 ActionView::Layouts
,包含后会导致 API 请求出现问题。
宝石文件:
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'
我将我的应用程序配置为使用 ActionDispatch::Flash
:
module MyApp
class Application < Rails::Application
...
config.middleware.use ActionDispatch::Flash
end
end
I configured extra modules for Rails API,应用程序控制器:
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
通过这些更改,Rails 管理仪表板似乎 运行 没问题。但是,当我尝试访问我的应用程序中的 JSON 资源时,抛出以下错误:
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"
测试代码(也试过加入format: :json
):
class BookingsControllerTest < ActionController::TestCase
test 'should get index' do
get :index
assert_response :success
end
end
这是控制器代码:
class BookingsController < ApplicationController
def index
@bookings = find_bookings
render json: @bookings, include: ['customer', 'client'], meta: meta
end
end
只有在我将 ActionView::Layouts
模块包含在顶层 ActionController::API
class 以支持 Rails 管理员后才会发生这种情况。
您应该在这个位置 bookings/index 有一个 json 查看文件 bookings/index。json.jbuilder 在这个文件里面有类似
的东西bookings/index.json.jbuilder
json.name @bookings.name
json.date @bookings.date
这是另一个缺少的模板
application/index
但真的不完全了解你的应用程序。所以也许这就是您使用 ActionView::Layouts 实现的应用程序布局。在这种情况下,要求您在 application/index.
位置实现布局页面文件注意:这两个文件位于 views 文件夹中。
如果我是你,我会尝试隔离 API 和 RailsAdmin 控制器。我认为这一定有效:
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
在config/initializers/rails_admin.rb
RailsAdmin.config do |config|
# other config stuff ...
config.parent_controller = '::RailsAdminCustomController'
end
只需检查 RailsAdmin::ApplicationController
here, and the config settings here。
截至 v1.0.0
(2016 年 9 月发布),Rails Admin 现在支持 Rails 5 API-mode 直 out-of-the-box。 gem 本身会注入缺少的中间件来呈现其视图,并且不需要额外的配置。
链接: