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
我正在尝试将Ruby on Rails更新到3.1版。我遵循升级到Rails 3.1截屏视频,除了语句之外,所有内容似乎都有效
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:
在上述所有情况下,当我尝试提交执行JS请求的相关表单时,我收到以下错误:
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 may\should\can insert some JavaScript code as made in the following example:
我知道问题与RJS模板有关,因为它们在3.1版本中不再可用。因此,为了运行一些JavaScript代码,在我的控制器文件中,我可能\应该\可以插入一些JavaScript代码,如下例所示:
format.js { render :js => "alert('Hello Rails');" }
BTW : ...but, is it recommended to use JavaScript code directly in a controller file?
BTW:...但是,是否建议直接在控制器文件中使用JavaScript代码?
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:
考虑到创建控制器操作中的上述代码,我想在成功提交后将用户重定向到@article路径。我可以:
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?
..但是,我怎么能按照“Ruby on Rails方式做事”来做同样的事情? RoR 3.1如何处理这些案件?
2 个解决方案
#1
14
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
:
或者在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 :)
注意我刚刚做了 - 没测试:)
#2
5
Using javascript code directly in controller files is not recommended.
建议不要直接在控制器文件中使用javascript代码。
Instead or .rjs
, you can use .js.erb
files. They act in a similar manner, allowing access to instance variables and helper methods.
相反,或.rjs,您可以使用.js.erb文件。它们以类似的方式运行,允许访问实例变量和辅助方法。
#1
14
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
:
或者在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 :)
注意我刚刚做了 - 没测试:)
#2
5
Using javascript code directly in controller files is not recommended.
建议不要直接在控制器文件中使用javascript代码。
Instead or .rjs
, you can use .js.erb
files. They act in a similar manner, allowing access to instance variables and helper methods.
相反,或.rjs,您可以使用.js.erb文件。它们以类似的方式运行,允许访问实例变量和辅助方法。