是否可以在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代码。有任何想法吗?或者我完全错了吗?
谢谢!
答案 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文件,根据传入的模板名称使用不同的文件。 耶!