是否可以在不使用 respond_to
方法的情况下呈现 js.erb 以响应 AJAX 请求?
我这么问有几个原因:
- 我只会对我的 Controller 进行 AJAX 调用;
- 我将不支持任何其他内容类型(即 :html、:xml 等);和
- 我希望能够呈现不同的
js.erb
文件,而不是与 Controller 方法名称相同的文件(即different.js.erb
)
这里有一些代码作为示例。
app/views/posts/awesome.js.erb:
alert("WOOHOO");
PostsController#create
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:
最佳答案
虽然 Kieber S. 的回答是正确的,但我认为对于那些想要支持创建 js.erb
文件的“常规”方法的人来说,这是另一种有值(value)的方法。
使用 render :template
代替 render :partial
。然而,这里需要注意的是,模板的搜索路径不会自动限定为 Controller 的名称(即 app/views/posts
)。相反,Rails 从 app/views/
开始。因此,要引用"template",您需要添加要查看的子文件夹,如果它不在根目录中。就我而言,我必须添加 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
重命名为删除下划线。
关于ruby-on-rails - 是否可以在不使用 respond_to 方法和使用非常规文件名的情况下呈现 js.erb?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7226142/