render :update and best practices

621 views
Skip to first unread message

bigbanger

unread,
Dec 13, 2007, 4:38:43 PM12/13/07
to Ruby on Rails: Talk
I'm pretty new to Rails and was wondering what the best practice is
with respect to render :update. Should logic be placed in the :update
blocks or should the logic be outside the blocks with separate blocks
provided for each case?

i.e.

render :update do |page|
if condition1
page.replace_html ...
<rest of code for condition 2>
else
page.replace_html...
<rest of code for condition 2>
end

or

if condition1
render :update do |page|
<code for condition 1>
end
else
render :update do |page|
<code for condition 2>
end
end

Also, when is it preferable to use an RJS template over render :update?

Jonathan Hernández Velasco

unread,
Dec 18, 2007, 11:14:09 AM12/18/07
to rubyonra...@googlegroups.com
El jue, 13-12-2007 a las 13:38 -0800, bigbanger escribió:
> I'm pretty new to Rails and was wondering what the best practice is
> with respect to render :update. Should logic be placed in the :update
> blocks or should the logic be outside the blocks with separate blocks
> provided for each case?
>
> i.e.
>
> render :update do |page|
> if condition1
> page.replace_html ...
> <rest of code for condition 2>
> else
> page.replace_html...
> <rest of code for condition 2>
> end
>
> or
>
> if condition1
> render :update do |page|
> <code for condition 1>
> end
> else
> render :update do |page|
> <code for condition 2>
> end
> end

I usually do it like second option (less code possible in render block),
but not sure which is better and why.

--
Jonathan Hernández Velasco aka jBilbo
http://jhernandez.gpltarragona.org
President de GPLtarragona ;; http://www.gpltarragona.org

Nathan Esquenazi

unread,
Dec 18, 2007, 1:21:17 PM12/18/07
to rubyonra...@googlegroups.com
Frankly, you shouldn't use render :update ... ever. It is sort of like
"render :text" in that it should be used sparingly to never.

The inherent problem with render :text, :inline, or :update is that it
is clearly putting view code in the controller. View code (anything
describing html, css, javascript or changes to them) should simply not
be in the controller.

Look at this code

render :update do |page|
page['list'].replace_html "some new html"
page['list'].replace_html "some new html"
page['list'].replace_html "some new html"
page['foo'].visual_effect :highlight
end

Clearly this type of code is all view-based and belongs in the view
folder within an rjs template.

The answer is to do something like this:

if condition1
render :action => "cond1.js.rjs"
else
render :action => "cond2.js.rjs"
end
--
Posted via http://www.ruby-forum.com/.

Anil Wadghule

unread,
Dec 18, 2007, 2:29:24 PM12/18/07
to rubyonra...@googlegroups.com
As you have asked for better practice to use render :update. I would like to say best is that dont use render :update, have related rjs file for action. You could write render :update in controller action. But it is again MVC.. render :update call is just for ui.. we update divs, replace divs with the help of it. It gets difficult to handle also. There should be separation between view code and controller code.

-- Anil

Reply all
Reply to author
Forward
0 new messages