シリアル化された属性を持つフォームをレンダリングしています。属性のシリアル化は通常の使用では正常に機能しますが、今はハッシュをシリアル化しようとしています。ビューコードは次のようになります
<%= @item.seasonality_of_sales_pct.each do |key, value| %>
<%= eval("f.label :'seasonality_of_sales_pct[:#{key}]'") %>
<%= eval("f.text_field :'seasonality_of_sales_pct[:#{key}]'") %>
<% end %>
私が得ているエラーはですundefined method 'seasonality_of_sales_pct[:January]' for #<Item:0x007f01083edd38>
。ただし、エラーをスローしている行は 2 番目eval
です。最初のものeval
は問題なく評価されます。なぜこれが起こっているのか、私は困惑しています。
コントローラーでは、次のような属性を設定しています
@item.seasonality_of_sales_pct = {January: nil, February: nil, March: nil, September: nil}
コメントで答えられるかもしれないもう 1 つの質問は、次のとおりです。このコードの臭いはどの程度ですか? Rails コミュニティがこのようなメタプログラミングについてどのように感じているかはわかりません。それをするのは少し痛いですが、ほとんどの場合うまくいくようです