在respond_to中呈现不同的Javascript文件

时间:2010-08-21 21:36:45

标签: javascript jquery ruby-on-rails ruby

我陷入了一个(显然)简单的问题。 在我的event_controller中,我有i_like_it动作:

  def i_like_it
    @event = Event.find(params[:id])

    ... # logic

    respond_to do |format|
      format.js
    end
  end

在我的情况下,“i_like_it”被调用:method => PUT(它是一个Ajax 调用,“i_like_it.js.erb”将作为脚本返回,它将是 在浏览器上执行。)

我想渲染一个名称不同的Javascript文件(不是 i_like_it.js.erb),但我在Rails API中找不到任何选项 文档。

respond_to do |format|
  format.js { render ??? }
end

Rails可以使用:js选项渲染vanilla JavaScript,但我不想要 在控制器中使用Javascript

你有什么建议吗?

谢谢你, Alessandro DS

2 个答案:

答案 0 :(得分:45)

如果你这样做:

respond_to do |format|
  format.js { render :action => "different_action" }
end

它将加载RAILS_ROOT / app / views / 你的控制器 /different_action.js.erb。

format.js块只是确保如果它是一个.js请求,你默认设置了正确的标题,它默认情况下会查找.js.erb或.js而不是.html.erb。

您还可以使用render:file在文件系统上呈现恰好包含JS的任意文件,或者您可以使用render的其他常用选项。 There are a few of them

答案 1 :(得分:7)

尝试使用render :template => 'your_file_here'代替

respond_to do |format|
  format.js
end

render的文档也介绍了其他一些选项。