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

标签 ruby-on-rails ajax ruby-on-rails-3 ruby-on-rails-3.1 renderpartial

是否可以在不使用 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/

相关文章:

php - 在服务器中搜索图片并显示

javascript - ajax调用会成功返回到重新加载的网页吗?

ruby-on-rails - has_many 关联 Rails4.2

ruby - 通过 ruby​​ 脚本设计身份验证

ruby-on-rails - rails 验证嵌套属性

ruby-on-rails - 如何使用自定义谓词通过干式验证来验证多个字段?

javascript数组保存到rails数据库中

ruby-on-rails - rails, accepts_nested_attributes_for 示例

php - 如何将 PHP 插入到 jQuery 中?

ruby-on-rails - 福雷姆 gem : how to link a forum to other models