入力画面も確認画面も同じrender :partial=>"form"を使えるヘルパ

入力画面の後に確認画面が来る時、入力画面は<%= text_field :user, :name %>としておいて、
確認画面は<%= h @user.name %>ってしていると思いますが、一々両方用意するの面倒だ。
更に次いでに言うと、DRYくさくない。


嫌だなー。というわけで作ってみました。
action名称がconfirmが含まれているという前提で書いています。
違うパターンの場合は改造が必要。

  def confirm_tag(*args)
    if params[:action] =~ /confirm/
      if args.size > 3
        object_name, method_name = args[1].to_s.dup, args[2].to_s.dup
        object_name.sub!(/\[\]$/,"")
        return object = self.instance_variable_get("@#{object_name}") && h(object.send(method_name))
      else
        return nil
      end
    else
      return send(*args)
    end
  end

を、application_helper.rbに追加するだけです。


使い方は

<%= confirm_tag :text_field, :user, :name %>

で、params[:action] =~ /confirm/がnilになる時に<%= text_field :user, :name %>として機能します。
勿論、params[:action] =~ /confirm/がnil以外のときは<%= h @user.name %>と機能します。


たいしたコードじゃないですが便利にはなるかと。