重写Rails远程表单提交中使用的JavaScript模板

重写Rails远程表单提交中使用的JavaScript模板,javascript,jquery,ruby-on-rails,Javascript,Jquery,Ruby On Rails,我有一个Rails应用程序,它似乎没有触发预期命名的.js.erb文件,所以我想覆盖默认行为,但我不确定如何 详情如下: 这是一个Rails 3应用程序,它通过AJAX调用呈现一个按钮,以切换后端某物的状态,然后在再次单击按钮时修改按钮的文本以反映反向操作。基本上,“保存到计划”变成“从计划中删除”,您可以再次单击它来执行相反的操作 这实际上很好,但前提是我将要执行的jQuery放入show.js.erb(以与显示按钮所在页面的方法相关联的视图命名),而不是toggle.js.erb(基于被调用

我有一个Rails应用程序,它似乎没有触发预期命名的.js.erb文件,所以我想覆盖默认行为,但我不确定如何

详情如下:

这是一个Rails 3应用程序,它通过AJAX调用呈现一个按钮,以切换后端某物的状态,然后在再次单击按钮时修改按钮的文本以反映反向操作。基本上,“保存到计划”变成“从计划中删除”,您可以再次单击它来执行相反的操作

这实际上很好,但前提是我将要执行的jQuery放入show.js.erb(以与显示按钮所在页面的方法相关联的视图命名),而不是toggle.js.erb(基于被调用的实际方法的名称)

在本例中,我使用jquery rails

从呈现按钮的视图(
show.html.erb
(更具体地说,从那里调用一个分部):

从my`shows\u controller.rb:

def toggle
  if current_user
    show = Show.find(params[:id])
    if show
      if current_user.shows.include?(show)
        current_user.shows.delete(show)
        flash[:notice] = "This show has been removed from your schedule."
      else
        current_user.shows << show
        flash[:notice] = "This show has been added to your schedule."
      end
    else
      flash[:error] = "Unknown show."
    end
  else
    flash[:error] = "You're not logged in."
  end
end
从我的日志:

ActionView::MissingTemplate (Missing template /shows/toggle/22 with {:handlers=>[:erb, :rjs, :builder, :rhtml, :rxml], :formats=>[:js, :html], :locale=>[:en, :en]} in view paths "/Data/Sites/tvgridthing.local/app/views", "/Users/jschuur/.rvm/gems/ruby-1.9.2-p0/gems/devise-1.1.3/app/views", "/Data/Sites/tvgridthing.local", "/"):
  app/controllers/shows_controller.rb:78:in `block (2 levels) in toggle'
  app/controllers/shows_controller.rb:76:in `toggle'
我假设,既然我想覆盖默认行为,我就不能再使用Rails3较短的“respond_with format?”

不相关的问题:有没有办法浓缩我在用户模型中添加/删除节目的逻辑?我正在进行查找、包含和添加/删除,不知道是否有更简单的解决方案

更新:我刚刚在其他人的帮助下解决了这个问题,我将此链接发送给了其他人。解决方案很简单:
render:toggle

仍然好奇是否有关于优化切换逻辑的建议。

如果您更改

format.js { render toggle_show_path(params[:id]) }
公正

format.js
默认情况下,它将转到文件夹视图/显示中名为
toggle.js.erb
的文件,因为您在控制器的方法切换中

如果您在方法显示内,则是您唯一的解决方案是

render :toggle

希望这对您有所帮助

format.js { render toggle_show_path(params[:id]) }
公正

format.js
默认情况下,它将转到文件夹视图/显示中名为
toggle.js.erb
的文件,因为您在控制器的方法切换中

如果您在方法显示内,则是您唯一的解决方案是

render :toggle

希望这有帮助

render :action => 'toggle'