ric*_*ard 9 ruby-on-rails actionview rails-admin rails-api ruby-on-rails-5
我最初在rails_api GitHub上发布了这个问题,但现在由于不活动而在此发布.
我正在尝试使用rails_adminRails 5 API应用程序.我添加了额外的ActionController模块,以至于我可以使用有效的rails_admin面板或工作API请求.问题似乎是rails_admin依赖于ActionView::Layouts,包含后会导致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'
Run Code Online (Sandbox Code Playgroud)
我配置我的应用程序使用ActionDispatch::Flash:
module MyApp
class Application < Rails::Application
...
config.middleware.use ActionDispatch::Flash
end
end
Run Code Online (Sandbox Code Playgroud)
我为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
Run Code Online (Sandbox Code Playgroud)
通过这些更改,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"
Run Code Online (Sandbox Code Playgroud)
测试代码(也尝试添加format: :json):
class BookingsControllerTest < ActionController::TestCase
test 'should get index' do
get :index
assert_response :success
end
end
Run Code Online (Sandbox Code Playgroud)
这是控制器代码:
class BookingsController < ApplicationController
def index
@bookings = find_bookings
render json: @bookings, include: ['customer', 'client'], meta: meta
end
end
Run Code Online (Sandbox Code Playgroud)
这只发生在我将ActionView::Layouts模块包含在顶级ActionController::API类中以支持Rails Admin之后.
如果我是你,我会尝试隔离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
Run Code Online (Sandbox Code Playgroud)
在 config/initializers/rails_admin.rb
RailsAdmin.config do |config|
# other config stuff ...
config.parent_controller = '::RailsAdminCustomController'
end
Run Code Online (Sandbox Code Playgroud)
只是检查RailsAdmin::ApplicationController 这里,和配置设置在这里.
| 归档时间: |
|
| 查看次数: |
2296 次 |
| 最近记录: |