evalは文字列をスクリプトとして解釈して実行するKernel所属のメソッドです。
これを活用すると、似たメソッドを延々と生成する愚を犯さずに済みます。
更に、文字列を生成して評価する形式であるため、変更に対しても柔軟です。
実際の所
helperに
def choose_action(key, flag) str = case key when :name "text_field :fund, key".instance_eval { |e| flag ? e << ", value: nil" : e } when :begin_date, :end_date "date_field :fund, key".instance_eval { |e| flag ? e << ", value: nil" : e } when :direct, :indirect "number_field :fund, key".instance_eval { |e| flag ? e << ", value: 0 ,onkeyup:'IDValue()'" : e} else "text_field_tag :fund, key, value: nil, :disabled => true" end end
と追加した上で、view上で
<% hash.each do |key, val| %> <%= eval choose_action(key, true) %> <% end %>
としてあげれば、適切なフォームを生成して吐き出す事ができます。