概要
Rails3で作られたアプリをRails5にアップグレードしています。
その過程でact_as_listを最新版の1.0.0にしたのですが、インスタンスメソッドのfirst?
に未定義メソッドエラーが発生しました。
エラー内容
acts_as_list: undefined method 'first?' for #<TodoItem:0x00007f70fd34cba8>
試したこと
最初first?
メソッドのレシーバとなるクラスがRails3とRails5間で変わったため、メソッドが効かなくなったと考え、新旧バージョンのレシーバのクラスを見たのですが、差異はありませんでした。(下記に示すToDoItem
クラスです。)
かなりの時間このエラーの解消に費やしています...
わかりにくい質問で大変申し訳ございませんがご回答のほどよろしくお願いいたします。
該当コード
[コントローラ]
- app/controllers/to_do_items_controller.rb
ruby
1class Admin::ToDoItemsController < ApplicationController 2 def index 3 @to_do_items = ToDoItem.order(:position).paginate(:page => params[:page]) 4 respond_to do |format| 5 format.html # index.html.erb 6 format.xml { render :xml => @to_do_items } 7 end 8 end 9 10(略)
[モデル]
- app/models/to_do_item.rb
ruby
1require 'rss' 2class ToDoItem < ActiveRecord::Base 3 default_scope -> { order("position") } 4 belongs_to :to_do_list, :validate => true 5 6 validates_associated :to_do_list 7 8 acts_as_list 9 10(略)
- app/models/to_do_list.rb
ruby
1class ToDoList < ActiveRecord::Base 2 has_many :to_do_item 3 4(略)
[ビュー]
- app/views/to_do_items/index.html.erb
ruby
1<%- @to_do_items.each do |to_do_item| -%> 2 <tr class="line<%= cycle("0", "1") -%>"> 3 <td><%= move_position(to_do_item) -%></td> 4 <td><%= link_to h(to_do_item.title), admin_to_do_item_path(to_do_item) -%></td> 5 (略) 6 </tr> 7<%- end -%>
- app/views/pages/_position.html.erb
ruby
1<%= object.first? ? image_tag('hoge.png', :size => '16x16') : image_tag('fuga.png') -%> 2 3(略)
[ヘルパー]
- app/helpers/application_helper.rb
ruby
1module ApplicationHelper 2 def move_position(object) 3 render :partial => 'page/position', :locals => {:object => object} 4 end 5 6(略)
バージョン情報
Rails: 3.0.1 -> 5.2.0
Ruby: 1.8.7 -> 2.6.5
acts_as_list: 0.1.7 -> 1.0.0
回答1件
あなたの回答
tips
プレビュー