gpt4 book ai didi

ruby-on-rails - 是否可以在不使用 respond_to 方法和使用非常规文件名的情况下呈现 js.erb?

转载 作者:行者123 更新时间:2023-12-04 05:46:32 25 4
gpt4 key购买 nike

是否可以在不使用 respond_to 方法的情况下呈现 js.erb 以响应 AJAX 请求?

我这么问有几个原因:

  1. 我只会对我的 Controller 进行 AJAX 调用;
  2. 我将不支持任何其他内容类型(即 :html、:xml 等);和
  3. 我希望能够呈现不同的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com