So I’m trying to re-factor some controller code with over 20 rjs
templates (that all do the same thing, but for different methods). My
original code is pretty straightforward. I just create an object then
re-render a couple partials.
Controller:
def input_event
@person = Person.find(params[:id])
event = Event.new(params[:event])
if event.save
return if request.xhr?
render :partial => ‘events’
render :partial => ‘inputs’
end
end
input_event.rjs
page.replace_html(“event_list”, :partial => “events”, :object =>
@person)
page.replace_html(“input_list”, :partial => “inputs”, :object =>
@person)
After browsing around, there appear to be two methods of re-factoring to
inline rjs. The first is to throw the contents of the rjs file directly
into the controller method like this:
def input_event
@person = Person.find(params[:id])
event = Event.new(params[:event])
if event.save
return if request.xhr?
render :update do |page|
page.replace_html(“event_list”, :partial => “events”, :object =>
@person)
page.replace_html(“input_list”, :partial => “inputs”, :object =>
@person)
end
end
end
The second method is to create a method in the corresponding helper
module to handle the rjs. This would be more attractive since I could
use this same method for my 20+ controller methods.
Controller
def input_event
@person = Person.find(params[:id])
event = Event.new(params[:event])
if event.save
return if request.xhr?
render(:update){|page| page.input(@person)}
end
end
Controller Helper
def input(person)
page.replace_html(“event_list”, :partial => “events”, :object =>
person)
page.replace_html(“input_list”, :partial => “inputs”, :object =>
person)
end
However, I can’t get either of these inline methods to work. Is there
anything else I need to change?
Thanks,
Peter