我使用序列化属性呈现表单。属性序列化在正常使用情况下工作正常,但现在我试图序列化一个散列。查看代码看起来像下面的序列化属性没有用表单助手正确评估
<%= @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>
。但是,引发错误的行是第二个eval
。第一个eval
评估很好。我很困惑,为什么这可能会发生。
在控制器中,我设立类似下面
@item.seasonality_of_sales_pct = {January: nil, February: nil, March: nil, September: nil}
这也许可以在评论回答另一个问题的属性:如何不好做这个代码味道?我不确定Rails社区如何感觉像这样的元编程。它伤害了我一点去做,但似乎工作的大部分时间
那么第一行如何评估?此外,如果我将逻辑移入控制器并将html呈现给我放入视图('<%= raw html%>')的变量('html = [LOOP]'),那么安全风险是否会减轻?或者有人仍然可以将代码注入控制器? –