Rails - 可以在RJS文件中使用ruby代码吗?

时间:2010-07-10 06:51:23

标签: ruby-on-rails ajax rjs

是否可以在RJS文件中使用ruby代码?

例如,destroy.js.rjs文件

if @template == "viewer"
  page["viewing_registry_#{@viewer_registry.id}"].replace_html :partial => "shared/request_viewer_link" 
else
  page["viewer_#{@viewer.id}"].visual_effect :DropOut, :duration => 2.0
  flash.discard
end

这是从具有

的destroy动作调用的RJS文件
  def destroy
    @viewer = Viewer.find(params[:id])
    @viewer_registry = Registry.find(@viewer.registry_id)
    @viewer.destroy
    flash[:notice] = "Viewer deleted"
    @template = params[:template]
    params[:template] = nil
    respond_to do |format|
      format.html { redirect_to registry_path(@viewer_registry) }
      format.js
    end
  end

因此,从AJAX调用开始,RJS文件用于响应,并根据调用destroy动作的模板给出不同的响应。

此刻,进行了AJAX调用,记录被破坏,然后没有任何反应,无论哪个模板调用了destroy操作。 所以我想知道它是否工作只是因为我不能在RJS文件中使用ruby代码。有任何想法吗?或者我完全错了吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

是的,我重新编写了destroy函数,使它看起来像这样:

  def destroy
    #is this bad because its not linked to current_user?
    #how would you even set it to be relational to current_user? 
    @viewer = Viewer.find(params[:id])
    @viewer_registry = Registry.find(@viewer.registry_id)
    @viewer.destroy
    flash[:notice] = "Viewer deleted"
    respond_to do |format|
      format.html { redirect_to registry_path(@viewer_registry) }
      format.js {
        if params[:template] == "viewer"
          render :action => "viewer_destroy.js.rjs"
        else
          render :action => "destroy.js.rjs"
        end
      }
    end
  end

所以我有两个RJS文件,根据传入的模板名称使用不同的文件。 耶!