メソッドをhelperからdecoratorに移動すると undefined method `term' のエラーが発生する
もともとuser_helper.rbに記述していたメソッドを新しく作成したcareer_decorator.rbに移動したいのですが、undefined method `term' for #のエラーがでます。
いくら考えて、実行しても改善できないので質問させていただきました。
以下は現状のコードです
career_decorator.rb (user_helper.rbから移動したコード)
module CareerDecorator
def term
start_date = l(start_date, format: :term)
if end_date.blank?
"#{start_date} - #{t('date.formats.ongoing')}"
else
"#{start_date} - #{l(end_date, format: :term)}"
end
end
def distance_of_term
if end_date.blank?
t('datetime.distance_in_words.ongoing')
else
distance_of_time_in_words(start_date, end_date)
end
end
end
app/views/users/user.html.slim
@user.careers.order('start_date desc, end_date desc').each do |career|
tr
td
p = link_to career.term, edit_user_career_path(user_id: @user, id: career)
p = career.distance_of_term
td = career.title
user_helper.rb(もともとはこのファイルの以下のようなtermとdestance_of_termメソッドがあり、これをcareer_decorator.rbに移動したい)
module UsersHelper
def term(career)
start_date = l(career.start_date, format: :term)
if career.end_date.blank?
"#{start_date} - #{t('date.formats.ongoing')}"
else
"#{start_date} - #{l(career.end_date, format: :term)}"
end
end
def distance_of_term(career)
if career.end_date.blank?
t('datetime.distance_in_words.ongoing')
else
distance_of_time_in_words(career.start_date, career.end_date)
end
end
end
careerがtermメソッドを持っていないことはなんとなくわかっていますがどうしたら良いのかわかりません。
自分なりの考え
- helperからdecoratorに該当メソッドを移動する時にコピペだけだとだめっぽい=>decoratorのメソッドを変更するのか
- モデルのアソシエーション操作が必要なのか?
- decorator.rbは手打ちではなくコマンドで作成しないといけないのか??=> rails g decorator careerとやったらgem周りでエラーが出ました
- careerオブジェクトがtermメソッドを持っていない
- users_controller.rbのshowにcareerのインスタンスを作成する必要がありそう
ヒントいただければ幸いです。