ActiveAdmin :: Devise :: Sessions #new中的Formtastic :: UnknownInputError
使用Rails 5.0.0.beta1。
已安装Active Admin和Devise。 这是Gemfile内容:
# Backend gem 'activeadmin', '~> 1.0.0.pre2' # Authentication # Master branch is added for Rails 5 support # https://github.com/plataformatec/devise/pull/3714 gem "devise", :github => 'plataformatec/devise', :branch => 'master'
这里按照说明安装。
rails g active_admin:install User rake db:migrate rake db:seed rails server
当我尝试输入/admin
,会出现以下错误:
显示
/usr/local/rvm/gems/ruby-2.2.2@mysite.com/gems/activeadmin-1.0.0.pre2/app/views/active_admin/devise/sessions/new.html.erb
,其中第10行被提升:无法找到输入类输入
提取的源(第332行):
raise Formtastic::UnknownInputError, "Unable to find input #{$!.message}"
如果我们查看activeadmin-1.0.0.pre2/app/views/active_admin/devise/sessions/new.html.erb
(第10行),这里没什么特别的:
f.input :password, label: t('active_admin.devise.password.title')
怎么了? 也许Formtastic类由于某种原因没有自动加载? 我试图将Formtastic更新到最新版本,但错误仍然存在。
我知道使用beta有点危险,但我想尝试一下。
弄清楚了。 以下是可用选项:
1)可能是最好的选择。 只需使用Rails 4.2.5并等待Rails 5的稳定版本并根据gem更新。
2)使用以下内容创建文件app/active_admin/inputs/input.rb
:
module ActiveAdmin module Inputs class Input < ::Formtastic::Inputs::StringInput end end end
相关信息可在此处获得 。
它解决了访问登录页面错误的问题,您现在可以成功登录并查看仪表板。 但是,如果您尝试输入“用户”部分,则会出现另一个错误:
NoMethodError:来自
/usr/local/rvm/gems/ruby-2.2.2@mysite.com/gems/activeadmin-1.0.0.pre2/lib/active_admin/view_helpers/fields_for.rb:20:in
#
未定义方法flat_map
/usr/local/rvm/gems/ruby-2.2.2@mysite.com/gems/activeadmin-1.0.0.pre2/lib/active_admin/view_helpers/fields_for.rb:20:in
fields_for_params
这是因为Rails 5中的ActionController::Parameters
不再扩展包含Enumerable
(包含方法flat_map )的ActiveSupport::HashWithIndifferentAccess
。 但我认为这不是你唯一会遇到的错误。
3)这个错误, 2)中提到的错误以及其他一些错误已在此pull请求中的 rails-5-spec
分支上修复,因此我在Gemfile中切换到使用它:
gem 'activeadmin', :github => 'activeadmin/activeadmin', :branch => 'rails-5-rspec'
现在错误消失了。
更新:我选择第3个选项,它解决了开发服务器上的问题,但是当我将应用程序部署到生产时,错误再次出现。 我使用了2)中提到的修复,现在它也可以在生产服务器上使用。
你的Gemfile中的formtastic的css master分支
gem 'formtastic', git: 'git@github.com:justinfrench/formtastic.git', :branch => 'master'
并bundle update
并重新启动服务器rails s -d