Formtastic::UnknownInputError 在 ActiveAdmin::Devise::Sessions#new
Formtastic::UnknownInputError in ActiveAdmin::Devise::Sessions#new
使用 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'
按照说明安装 here。
rails g active_admin:install User
rake db:migrate
rake db:seed
rails server
当我尝试输入 /admin
时,出现以下错误:
Showing /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
where line #10 raised:
Unable to find input class Input
Extracted source (around line #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 更新到最新版本,但错误仍然存在。
我知道使用测试版有一定风险,但我想尝试一下。
想通了。以下是可用选项:
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
有相关信息here。
解决了访问登录页面错误,您现在可以成功登录并查看仪表板。但是,如果您尝试进入用户部分,例如,您会收到另一个错误:
NoMethodError: undefined method flat_map
for
#<ActionController::Parameters>
from /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) 中提到的错误和一些其他错误已经在 rails-5-spec
分支中修复this pull request,所以我转而在 Gemfile 中使用它:
gem 'activeadmin', :github => 'activeadmin/activeadmin', :branch => 'rails-5-rspec'
现在错误消失了。
更新: 我选择 3rd 选项,它解决了开发服务器上的问题,但是当我将应用程序部署到生产环境时,出现错误再次。我使用了 2) 中提到的修复,现在在生产服务器上也可以了。
css Gemfile 中 formtastic 的 master 分支
gem 'formtastic', git: 'git@github.com:justinfrench/formtastic.git', :branch => 'master'
并执行 bundle update
并重新启动服务器 rails s -d
使用 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'
按照说明安装 here。
rails g active_admin:install User
rake db:migrate
rake db:seed
rails server
当我尝试输入 /admin
时,出现以下错误:
Showing
/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
where line #10 raised:Unable to find input class Input
Extracted source (around line #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 更新到最新版本,但错误仍然存在。
我知道使用测试版有一定风险,但我想尝试一下。
想通了。以下是可用选项:
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
有相关信息here。
解决了访问登录页面错误,您现在可以成功登录并查看仪表板。但是,如果您尝试进入用户部分,例如,您会收到另一个错误:
NoMethodError: undefined method
flat_map
for#<ActionController::Parameters>
from/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) 中提到的错误和一些其他错误已经在 rails-5-spec
分支中修复this pull request,所以我转而在 Gemfile 中使用它:
gem 'activeadmin', :github => 'activeadmin/activeadmin', :branch => 'rails-5-rspec'
现在错误消失了。
更新: 我选择 3rd 选项,它解决了开发服务器上的问题,但是当我将应用程序部署到生产环境时,出现错误再次。我使用了 2) 中提到的修复,现在在生产服务器上也可以了。
css Gemfile 中 formtastic 的 master 分支
gem 'formtastic', git: 'git@github.com:justinfrench/formtastic.git', :branch => 'master'
并执行 bundle update
并重新启动服务器 rails s -d