I thought render didn't even return a string, have you tried
render_to_string?

http://apidock.com/rails/ActionController/Base/render_to_string

-M

On Jan 30, 6:56 pm, Chris McCann <[email protected]> wrote:
> I'm wrestling with trying to get some Ajaxy UI going in a Rails 2.3.5
> app using jQuery's colorbox pop-up/modal plugin.  I don't currently
> have the time to port it to Rails 3 just in case anyone wonders why
> I'm still using 2.3 (it's a big app).
>
> I have a link on a form that opens up a colorbox window in which the
> user can add a new a new model instance that is then selected in a
> select on the main form.  Basically, if the option they want isn't
> shown in the select they can use this pop-up to create and select it.
>
> Opening the form in colorbox is no problem, the issue is in how to
> handle the form submission and possible validation errors inside of
> the colorbox modal display.
>
> If all goes well and the new model validates then I have a
> create.js.erb that updates the select on the main form and sets its
> value to the new model instance that was created in the colorbox pop-
> up.  All is well here.
>
> If there's a validation error, though, I want to effectively just re-
> render the "new" form with the bog-standard Rails model validation
> errors.  And this is the part that's driving me a bit insane.
>
> In order to render the :new template into the colorbox display area I
> created a "create_error.js.erb" template that looks like this:
>
>   jQuery.colorbox({html: "<%= escape_javascript(render :template
> => :new) %>"});
>
> But this didn't work.  Nothing happened and all I saw was a ROLLBACK
> in the dev log due to the (intentional) model validation error.
>
> I opened Firebug and looked at the Net > XHR panel.  There I found the
> response received from the call was:
>
>   jQuery.colorbox({html: " "});
>
> The render call was completely swallowed up.  Can anyone explain to me
> what's happening here?
>
> No matter what I tried it wouldn't render the template.  I've used
> this technique before with partial templates so I made a copy of the
> new view and named it _new, then did this:
>
>   jQuery.colorbox({html: "<%= escape_javascript(render :partial =>
> 'locations/new') %>"});
>
> And now it worked -- mostly.  The rendered partial didn't have the
> correct formatting, which I tracked down to it not using the correct
> layout.  The layout for the controller was a pared-down one just for
> this case called "popup".  Why didn't it use the correct layout?
>
> So I decided to be explicit:
>
>   jQuery.colorbox({html: "<%= escape_javascript(render(:partial =>
> 'locations/new', :partial => 'layouts/popup) %>"});
>
> And now it failed complaining that it couldn't find the layout named
> "_popup".  This is a Rails 2.3.5 app, and I thought partial layouts
> weren't added until later.  But to play along I created a new layout
> called _popup and finally, it all worked.
>
> I'm scratching my head on how I should be doing this.  I simply want
> to render the content of a view template into the colorbox area.
> Having to "partialize" the view and the layout seems totally goofy to
> me.
>
> Can anyone suggest a better, saner, DRYer approach?
>
> Cheers,
>
> Chris

-- 
SD Ruby mailing list
[email protected]
http://groups.google.com/group/sdruby

Reply via email to