もともとuser_helper.rbに記述していたメソッドを新しく作成したcareer_decorator.rbに移動したいのですが、undefined method `term' for #Career:0x007feba8b82130のエラーがでます。
いくら考えて、実行しても改善できないので質問させていただきました。
以下は現状のコードです
career_decorator.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
careerがtermメソッドを持っていないことはなんとなくわかっていますがどうしたら良いのかわかりません。
自分なりの考え
- helperからdecoratorに該当メソッドを移動する時にコピペだけだとだめっぽい=>decoratorのメソッドを変更するのか
- モデルのアソシエーション操作が必要なのか?
- decorator.rbは手打ちではなくコマンドで作成しないといけないのか??=> rails g decorator careerとやったらgem周りでエラーが出ました
- careerオブジェクトがtermメソッドを持っていない
- users_controller.rbのshowにcareerのインスタンスを作成する必要がありそう
ヒントいただければ幸いです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。