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?
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
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.