是否可以在不使用respond_to
方法的情况下呈现js.erb以响应AJAX请求?
我问的原因有几点:
js.erb
文件,而不是与控制器方法相同的文件(即different.js.erb
)以下是一些代码作为示例。
应用/视图/帖/ awesome.js.erb:
alert("WOOHOO");
PostsController#创建
def create
@post = Post.new(params[:task])
if @post.save
render :partial => 'awesome.js.erb'
end
end
当通过AJAX调用create
方法时,Rails会抱怨部分丢失:
ActionView::MissingTemplate (Missing partial post/awesome.js, application/awesome.js with {:handlers=>[:erb, :builder, :coffee, :haml], :formats=>[:js, "application/ecmascript", "application/x-ecmascript", :html, :text, :js, :css, :ics, :csv, :xml, :rss, :atom, :yaml, :multipart_form, :url_encoded_form, :json], :locale=>[:en, :en]}. Searched in:
答案 0 :(得分:5)
虽然Kieber S.的答案是正确的,但我认为这是另一种方法,对于那些想要支持创建js.erb
文件的“常规”方法的人来说,这种方法很有用。
而不是使用render :partial
使用render :template
。但是,这里需要注意的是,模板的搜索路径不会自动限定为控制器的名称(即app/views/posts
)。相反,Rails从app/views/
开始。因此,要引用“模板”,您需要添加要查看的子文件夹(如果它不在根目录中)。就我而言,我必须添加posts
。
def create
@post = Post.new(params[:task])
if @post.save
# using :template and added 'posts/' to path
render :template => 'posts/awesome.js.erb'
end
end
这样做的好处是,如果你碰巧想要使用respond_to
方法并遵循惯例,则不需要通过删除下划线来重命名js.erb
。
答案 1 :(得分:3)
部分文件需要用下划线命名。
尝试将您的部分重命名为app/views/posts/_awesome.js.erb