【发布时间】:2011-09-15 21:35:11
【问题描述】:
我正在尝试将 Ruby on Rails 更新到版本 3.1。我关注了Upgrading to Rails 3.1 截屏视频,除了声明之外,一切似乎都正常
format.js { render(:update) { |page| page.redirect_to @article } }
在许多控制器中,我有如下代码:
def create
...
respond_to do |format|
format.js { render(:update) { |page| page.redirect_to @article } }
end
end
在上述所有情况下,当我尝试提交执行 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)
我知道问题与 RJS 模板有关,因为它们在 3.1 版本中不再可用。因此,为了运行一些 JavaScript 代码,我可能\应该\可以在我的控制器文件中插入一些 JavaScript 代码,如下例所示:
format.js { render :js => "alert('Hello Rails');" }
顺便说一句:...但是,是否建议直接在控制器文件中使用 JavaScript 代码?
考虑到上面create控制器动作中的代码,我想在提交成功后将用户重定向到@article路径。我能做到:
format.js { render :js => "window.location.replace('#{article_url(@article)}');" }
..但是,我怎样才能按照“Ruby on Rails 做事的方式”来做同样的事情? RoR 3.1 将如何处理这些情况?
【问题讨论】:
标签: javascript ruby-on-rails ruby ajax ruby-on-rails-3