前提・実現したいこと
app/models/concerns配下にあるmodule(app/models/concerns/fruit.rb)が肥大化していたので、ActiveDecoratorを用いてviewの描画でしか使われていないようなメソッドをデコレーター層に切り離したいです。
イメージとしては下記のようにapp/decorators/concerns/fruit_decorator.rbを作成しfruit.rbからfruit_decorator.rbにメソッドを移し利用できるようにしたいです。
app/decorators/concerns/fruit_decorator.rb module FruitDecorator extend ActiveSupport::Concern def full_name "#{first_name} #{last_name}" end end
※ fruit.rbには他にもたくさんのメソッドがありますが一例としてviewの描画でしか使われていないfull_nameメソッドのみ定義してみました。
現状
module
app/models/concerns/fruit.rb module Fruit extend ActiveSupport::Concern def full_name "#{first_name} #{last_name}" end end
moduleをincludeしているモデル
app/models/apple.rb class Apple < ApplicationRecord include Fruit end
app/models/grape.rb class Grape < ApplicationRecord include Fruit end
app/models/banana.rb class Banana < ApplicationRecord include Fruit end
試したこと
app/decorators/concerns/fruit_decorator.rb module FruitDecorator extend ActiveSupport::Concern def full_name "#{first_name} #{last_name}" end end
上記、前提・実現したいことに記載のようにfruit_decorator.rbを作成しfruit.rbからfruit_decorator.rbにfull_nameメソッドを移しました。
その後、下記のようにviewでfull_nameメソッドを使用しましたが、エラーが出てしまいdecorator層に定義したメソッドを呼び出すことができませんでした。
app/views/apples/index.html.erb <% @apples.each do |apple| %> <%= apple.full_name %><br> <% end %>
エラー文 ActionView::Template::Error - undefined method `full_name'
補足情報(FW/ツールのバージョンなど)
- Rails 6.0.3.5
- gem "active_decorator"