1

いくつかのフォームに入力するためにハッシュを使用しています。その1つがユーザー情報です。このハッシュをユーザー登録フォームで正常に使用しています。次のように、同じハッシュを使用して編集フォームに入力するというアイデアでした。

<% 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メソッドではないため、答えは、変数column_nameをパラメーターとして使用してsendメソッドを使用することです。

したがって、次を置き換えます。

:value => @user.column_name

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

1 に答える 1

1

犯人は@user.column_name。1つの方法は、eval("@user。"+ column_name)を使用することです。より良い方法は、私が以下に示したものです。

これを試して:

<% 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 %>

これが機能するかどうか教えてください。

幸運を!

于 2012-06-06T23:37:17.490 に答える