Thursday, May 23, 2024
86
rated 0 times [  92] [ 6]  / answers: 1 / hits: 15262  / 13 Years ago, thu, september 15, 2011, 12:00:00

I am trying to update Ruby on Rails to the version 3.1. I followed the Upgrading to Rails 3.1 screencast and all seems to work except for statements as



format.js { render(:update) { |page| page.redirect_to @article } }


In many controllers I have code like the following:



def create
...

respond_to do |format|
format.js { render(:update) { |page| page.redirect_to @article } }
end
end


In all above cases, when I try to submit related forms performing JS requests, I get the following error:



ActionView::MissingTemplate (Missing template articles/update, application/update with {:handlers=>[:erb, :builder, :coffee], :formats=>[:js, :html], :locale=>[:en, :en]}. Searched in:
* /<MY_PROJECT_PATH>/app/views
):

app/controllers/articles_controller.rb:114:in `create'

Rendered /<...>/.rvm/gems/ruby-1.9.2-p136/gems/actionpack-3.1.0/lib/action_dispatch/middleware/templates/rescues/missing_template.erb within rescues/layout (0.3ms)


I know that the problem was related to RJS templates because them are not more available in the 3.1 release. So, in order to run some JavaScript code, in my controller files I mayshouldcan insert some JavaScript code as made in the following example:



format.js { render :js => alert('Hello Rails'); }


BTW : ...but, is it recommended to use JavaScript code directly in a controller file?



Considering the above code in the create controller action, I would like to redirect user to the @article path after a successful submission. I can do:



format.js { render :js => window.location.replace('#{article_url(@article)}'); }


..but, how can I do the same thing by following the Ruby on Rails Way to do things? How RoR 3.1 would handle these cases?


More From » ruby-on-rails

 Answers
50

I'd go with:



render js: %(window.location.href='#{article_path @article}')


Or put something along the lines of this in your application_controller.rb:



def js_redirect_to(path)
render js: %(window.location.href='#{path}') and return
end


Then in your controllers you can just call:



js_redirect_to(article_path @article)


Note I just made this up - not tested :)


[#90075] Wednesday, September 14, 2011, 13 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
anais

Total Points: 672
Total Questions: 118
Total Answers: 121

Location: Oman
Member since Fri, Dec 23, 2022
1 Year ago
anais questions
Fri, Jul 29, 22, 00:00, 2 Years ago
Mon, Jul 19, 21, 00:00, 3 Years ago
Tue, May 11, 21, 00:00, 3 Years ago
Fri, Apr 2, 21, 00:00, 3 Years ago
;