1

我正在使用哈希来填写一些表格。其中之一是用户信息。我在用户注册表单中成功使用了这个哈希。想法是使用相同的 Hash 来填写编辑表单,如下:

<% NEW_USER_HASH.each do |column_name,field_info|  %>
    <div class="field">
      <% if field_info["type"] != "hidden_field" %>
          <%= f.label field_info["label"] %>
      <% end %>
      <%= f.send(field_info["type"].to_sym, column_name , :value => @user.column_name) %>
    </div>
<% end %>

但我收到以下错误消息:

undefined method `column_name'

我尝试了以下变体,结果相同:

:value => @user.column_name.to_s
:value => @user.column_name.to_sym

有任何想法吗?

回答:

column_name 不是@user 方法,所以答案是使用 send 方法,以变量 column_name 作为参数。

所以,替换:

:value => @user.column_name

:value => @user.send(column_name)    
4

1 回答 1

1

I think the culprit is @user.column_name. One way is to use eval("@user." + column_name). Better way is what I have shown below.

Try this:

<% NEW_USER_HASH.each do |column_name,field_info|  %>
    <div class="field">
      <% if field_info["type"] != "hidden_field" %>
          <%= f.label field_info["label"] %>
      <% end %>
      <%= f.send(field_info["type"].to_sym, column_name , :value => @user.send(column_name)) %>
    </div>
<% end %>

Let me know if this works.

Good luck!

于 2012-06-06T23:37:17.490 回答