我的一个控制器中有一个创建操作,它响应ajax和html请求。在create动作中,我使用find_or_initialize_by_such_and_such设置了一个实例变量(@location)。然后,我使用以下方法测试该位置是否已存在:
if @location.id.nil?
@location.save
respond_with(@location, :location => root_path) do |format|
format.html { redirect_to root_path }
end
end
这很好用,因为基本上partial(create.js.erb)会将新保存的位置对象附加到列表中。
当用户输入已存在的位置(即具有id)时,会出现问题。在这种情况下,我不希望将找到的位置附加到列表中,因为它会导致重复(所有位置都已存在)。由于@location.id.nil?
在这种情况下是错误的,因此上面的块中的代码显然没有被执行,但我很难弄清楚如何处理这种情况。我尝试过这样的事情:
respond_with(nil, :location => root_path) do |format|
format.html { redirect_to root_path }
end
但是js.erb文件仍然抓取@location实例变量并执行将对象添加到列表的javascript。
因此,解决此问题的最佳方法是什么,以便在find_or_initialize_by返回已创建的对象的情况下,响应将不会执行javascript以将此对象附加到列表中?
答案 0 :(得分:1)
删除
respond_with(nil, :location => root_path) do |format|
format.html { redirect_to root_path }
end
只留下这个
redirect_to root_path
如果您没有任何额外回复