.js.erb文件可用于所有其他视图?

时间:2012-10-26 16:06:37

标签: ruby-on-rails ajax error-handling

所以,在我的rails应用程序中,我在其中一个页面上ajaxified错误消息。这个过程(所以每个人都理解)首先,在我的“编辑”link_to中,我在其末尾添加了:remote => true,因此让它发送了一个ajax请求。然后我在format.js块中添加了行respond_to do |format|。然后,我使用以下代码行$('#error').html("<%= flash[:error] %>");创建了一个edit.js.erb文件,它基本上在当前页面中找到了错误div,并用错误的flash消息替换了该div中的html。这很酷吗?如果发生错误,不会再烦人的页面刷新。

问题是,我想对我的所有编辑和销毁页面执行此操作,但是如何不为每个视图文件夹制作edit.js.erb和destroy.js.erb文件?看起来很简单,也许我只是错过了一个明显的答案,因为我已经筋疲力尽,但我无法弄明白......所以...帮助?????

EDIT!

这是我的编辑控制器

def edit
user = User.find(session[:id])
@table = Table.find(params[:id])



if user.id != @table.created_by

  flash[:error] = "ERROR"
  respond_to do |format|
    format.js {render :template => 'shared/show_error'}
    format.html
  end
else
  flash[:error] = ""
  respond_to do |format|
    format.js {render :template => 'table/edit', :formats => :html}
    format.html
  end

end
end

现在的问题是,它可以正常显示错误,但如果没有错误,它就不会动作呈现编辑页面......在服务器窗口中它显示它确实,但它实际上并没有在屏幕上显示...有什么想法吗?

2 个答案:

答案 0 :(得分:2)

我建议你制作一个通用的JS.erb文件,例如:

# app/views/shared/show_errors.js.erb
('#error').html("<%= flash[:error] %>");

然后在您的控制器操作中或从另一个JS.erb文件中输入:

render :template => "shared/show_errors"

瞧!

答案 1 :(得分:0)

我实际上是偶然解决了我自己的问题...我从{render :template => 'table/edit', :formats => :html}区块删除了行else