質問編集履歴

2 問題点が変更となった為、追記しました。

maki_k

maki_k score 17

2018/06/06 18:24  投稿

AuthlogicでArel::Visitors::UnsupportedVisitErrorエラー
Ruby/Railsのバージョンアップを行っていますが、
ログイン画面からログインしようと試みると下記エラーが発生してしまいます。
`hoge_session/create`中の`save`で落ちる為追っていくと、
`Authlogic`の`validate_by_password`で落ちていました。
元々モンキーパッチがあたっていた為これを外し、
何かがオーバーライドしてしまっているのかと思い
`config/initializers`中の`ActiveRecord`, `Authlogic`関連のソースを全てコメントアウトしましたが、
やはり同様のエラーが発生します。
漠然とした質問で大変恐縮ですが、
手がかりがなく、何を調べたらよいのか困っている状況です。
この辺りを調べてみたらどうかというご指摘を頂けますと幸いです。
どうぞよろしくお願いいたします。
`Ruby 2.5.0(旧:1.9.x)`
`Rails 5.1.6(旧:3.2.x)`
`Authlogic 4.1.0(旧:3.1.0)`
```
#エラーメッセージ
Arel::Visitors::UnsupportedVisitError (Unsupported argument type: String. Construct an Arel node instead.):
app/controllers/hoge_sessions_controller.rb:xx:in `create'
app/controllers/hoge/hoge_base_controller.rb:xx:in `define_session_to_model'
app/controllers/application_controller.rb:xx:in `define_controller_to_model'
```
```ruby
#hoge_sessions_controller.rb
 def create
   @hoge_session = HogeSession.new(hoge_session_params.to_h)
   login = @hoge_session.save
   ...(略)...
 end
 
 private
 def hoge_session_params
   params.require(:hoge_session).permit(:login, :password)
 end
```
```ruby
#model/hoge.rb
class Hoge < ApplicationRecord
 acts_as_authentic do |c|
   c.logged_in_timeout = 999.years
   c.password_salt_field = false
   c.validate_login_field   = false
   c.merge_validates_uniqueness_of_login_field_options(:case_sensitive => true)
 end
```
```
追記:`hoge.rb`の
`c.merge_validates_uniqueness_of_login_field_options(:case_sensitive => true)`を
`c.validates_uniqueness_of_login_field_options[:case_sensitive] = true`に直したところ
上記エラーは発生しなくなりましたが、ただしいID/パスワードをいれても、ログインID/パスワードが間違っている扱いとなってしまい、
ログインすることができない状態となっています。
  • Ruby on Rails 5

    5862 questions

    Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

1 Railsのバージョンアップに際しと題していましたが、Authlogicが原因のようなのでタイトルを修正しました。

maki_k

maki_k score 17

2018/06/06 17:05  投稿

RailsのバージョンアップでArel::Visitors::UnsupportedVisitErrorエラー
AuthlogicでArel::Visitors::UnsupportedVisitErrorエラー
Ruby/Railsのバージョンアップを行っていますが、
ログイン画面からログインしようと試みると下記エラーが発生してしまいます。
`hoge_session/create`中の`save`で落ちる為追っていくと、
`Authlogic`の`validate_by_password`で落ちていました。
元々モンキーパッチがあたっていた為これを外し、
何かがオーバーライドしてしまっているのかと思い
`config/initializers`中の`ActiveRecord`, `Authlogic`関連のソースを全てコメントアウトしましたが、
やはり同様のエラーが発生します。
漠然とした質問で大変恐縮ですが、
手がかりがなく、何を調べたらよいのか困っている状況です。
この辺りを調べてみたらどうかというご指摘を頂けますと幸いです。
どうぞよろしくお願いいたします。
`Ruby 2.5.0(旧:1.9.3)`
`Rails 5.1.6(旧:3.2.13)`
`Ruby 2.5.0(旧:1.9.x)`
`Rails 5.1.6(旧:3.2.x)`
`Authlogic 4.1.0(旧:3.1.0)`
```
#エラーメッセージ
Arel::Visitors::UnsupportedVisitError (Unsupported argument type: String. Construct an Arel node instead.):
app/controllers/hoge_sessions_controller.rb:xx:in `create'
app/controllers/hoge/hoge_base_controller.rb:xx:in `define_session_to_model'
app/controllers/application_controller.rb:xx:in `define_controller_to_model'
```
```ruby
#hoge_sessions_controller.rb
 def create
   @hoge_session = HogeSession.new(hoge_session_params.to_h)
   login = @hoge_session.save
   ...(略)...
 end
 
 private
 def hoge_session_params
   params.require(:hoge_session).permit(:login, :password)
 end
```
```ruby  
#model/hoge.rb  
class Hoge < ApplicationRecord  
#
 acts_as_authentic do |c|
   c.logged_in_timeout = 999.years
   c.password_salt_field = false
   c.validate_login_field   = false
   c.merge_validates_uniqueness_of_login_field_options(:case_sensitive => true)
 end
```
  • Ruby on Rails 5

    5862 questions

    Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

  • Ruby on Rails 3

    126 questions

    Ruby on Rails3はRubyによって書かれたオープンソースのウェブフレームワークです。Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る