Render :update and script tags

What did you expect ? You've asked controller to update HTML, so controller generated javascript to do that. You can then execute it on page. But if you used e.g. remote_function with :update parameter, then Ajax.Request expect some HTML from server to put into element you've specified.

I think it is (almost always) better to use remote_function without :update argument, because it gives you more flexibility (not just updating contents of single element).

render :update is meant be used in the controller as a response to an AJAX request, it returns pure javascript that will be executed by tha AJAX code that called the action ... so of course there are no <script> tags.

Pedro Cardoso wrote:

Anyway, I'm using this do display the errors in a specific part of my html, so this is no response to a request.

Everything's a responds to a request. Someone asked if you were doing a response to an Ajax request. You are apparently injecting JavaScript when the page first paints.

The following quote is from the manual "Use this in your Ajax response bodies, either in a <script> tag or as plain JavaScript sent with a Content-type of "text/javascript"".

So, this is my question, how do I do that? How can I add the script tags?

You ensure that the strings with <script> appear around it. If it's in your controller, and if you are not rendering an Ajax-style request, then use '<script>' + and + '</script>' around the string it returns.

If you are inside a view, go <script><%= render :etc %></script>

Note that there are few reasons to do the former. Yet there might be many reasons to do the latter - sharing the first-paint code with the update code, for example.

And note a purist would need the type='text/javascript', the // CDATA escape things. I don't know what function returns those.