decoratorをviewで使っているのにno method errorになる・・・
モデルにメソッドを用意したものの、どう考えてもView専用だったのでdecoratorに移動しよう
ってことでdecoratorに移動させたらNoMethodErrorになった
ここでは仮にfuga_decoratorのdeco_nameメソッドとして
= hoge.fuga.deco_name
undefined method `deco_name' for #<Fuga:0x007f8ef2ae23a0>
解決策としては
- foo = ActiveDecorator::Decorator.instance.decorate(hoge.fuga)
= foo.deco_name
こんな感じでクリア
あとで試してみたらこれでもいいらしい
- ActiveDecorator::Decorator.instance.decorate(hoge.fuga)
= hoge.fuga.deco_name
これでなんでOKなのかよくわからないけど、うまいことやってくれてるんだろうなw
(ソース読めよ!!)
で、エラーになった原因だけど、decoratorはどうやらcontrollerからviewに渡す際にdecorateしてるみたいで、
controller内で宣言した変数とかには使えるけど、has_oneとかbelongs_toとかみたいな関連要素に関しては、
controller内で宣言されてないので明示的にdecorateしてあげる必要があるみたい。
今回の場合だったら
def show
・・・
@fuga = hoge.fuga
end
= @fuga.deco_name
みたいにすればviewでdecorateしなくても使えるみたい。
あとはpartialに渡す時もdecorateしてくれるそうなので、うまくrenderを利用すればdecorateを書く必要はないっぽい。
また少し賢くなった
参考
メソッドをhelperからdecoratorに移動すると undefined method `term' のエラーが発生する
Author And Source
この問題について(decoratorをviewで使っているのにno method errorになる・・・), 我々は、より多くの情報をここで見つけました https://qiita.com/aiyu427/items/6360c39e696d8908e533著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .