ActionPack 1.13.2: to_text_area_tag issue

Hi all,

I'm fairly new to rails and thus might be missing something here, but
I
think I have found a but in ActionPack. If this is not the right
place
to post this, please let me know where. I discovered this issue while
attempting to use the lastest edge version of ajax_scaffold (mooey,
MUI,
whatever it's going to be called). I kept getting the error:

private method `split' called for 20:Fixnum

Curious as to what was going on, I decided to delve into the code a
bit.
I found that mooey was calling the input(...) form helper to generate
the input fields for models and sends in the option :size => 20.
input
then calls to_text_area_tag. Well, since :size is a Fixnum and
to_text_area_tag expects it to be a string, we get the above noted
error.

This does not appear to be an error with the mooey code, however,
since
input(...) seems to be intended to dynamically create the correct tag
depending on the "method" type. Therefore, if the method being used
with input(...) was a string, it would call to_input_field_tag which
assumes that :size is a Fixnum and everything would be alright.

What I did next was to change to_text_area_tag to recognize detect if
:size was a Fixnum. If it is, simply set both :options["rows"] and
:options["cols"] to the value of :size. Otherwise, use the original
logic to split the string and determine the cols/rows.

I hope this is clear and helps somewhat. I'm not sure that this is
the
proper solution, but it does seem to be a legitimate issue. Below is
the code for my new to_text_area_tag:

      def to_text_area_tag(options = {})
        options =
DEFAULT_TEXT_AREA_OPTIONS.merge(options.stringify_keys)
        add_default_name_and_id(options)

        if size = options.delete("size")
          if size.kind_of? Fixnum
            options["cols"] = size
            options["rows"] = size
          else
            options["cols"], options["rows"] = size.split("x")
          end
        end

        content_tag("textarea", html_escape(options.delete('value') ||
value_before_type_cast(object)), options)
      end

Now that I've gotten that out of the way, I must say that rails is
AWESOME!! I'm able to develop real working apps so much quicker than
I've ever done in php or java. Great stuff! Keep up the good work.

Brendon Davidson

I found that mooey was calling the input(...) form helper to generate
the input fields for models and sends in the option :size => 20.
input then calls to_text_area_tag. Well, since :size is a Fixnum and
to_text_area_tag expects it to be a string, we get the above noted
error.

Good find. The response should be to throw away the size attribute,
though, rather than to assume it's the length of a square side. You
can style with CSS.

I've committed a fix.

In the future, you can add patches at dev.rubyonrails.org. Welcome to.