我在使用Rails,Javascript和重定向时遇到了严重问题 . 基本上,如果禁用JS,我会遇到重定向到不同页面的“简单”问题 . 如果启用了JS,那么我立即添加一个新项内联 - 这就像一个魅力 . 但是,如果禁用JS,我想重定向到另一个控制器的NEW页面 . 基本上模型设置如下:
Site -> Buildings -> Controllers (not to be confused with Rails "controllers")
我有一个“SiteManagerController”,它使用JS来管理整个事情 . 基本上我有一个场景,我正在尝试执行以下操作:
1)如果JS已启用我想添加项内联2)如果JS被禁用,我希望渲染“:controller => buildings,:action => new”
我的“link_to_remote”很简单 . 正如我所说,它适用于JS . 我的rails控制器代码如下:
def add_building @building = Building.new @ building.name =“Untitled”@ building.site_id = params [:id] @ building.save respond_to do | format | format.html {redirect_to:controller =>“buildings”,:action =>“new”} format.js end end
这不起作用 . 对于它的 Value ,当查看页面源时,没有任何迹象表明当JS启用与禁用时有任何不同 . 所有链接看起来都一样 - 即Ajaxy .
我知道这不应该是一个复杂的问题,但我很难过 .
最好 .
附:请不要更改这篇文章的 Headers . ;)
3 回答
我相信解决方案在于“link_to_remote”而不是任何特定的控制器 . 以下似乎有效:
如果你们有更好的建议,请务必张贴 . 再次感谢 .
您是否尝试过编写表单以便重定向到另一个页面,然后在页面加载时使用ajax-y js覆盖一些js?这样,如果禁用js,页面将按预期重定向 .
提到的link_to_remote解决方案可能会有效,但是如果你正在寻找一种不引人注目的方法,你可以使用这样的一些javascript(jQuery):
在.html.erb文件中:
在javascript文件中:
然后返回一些JS,它将更新您想要更改的页面区域 .
我确信有一种类似的方法可以使用Prototype,这是rails的默认JS库,但我不知道Prototype .
另请注意,这使用了restful路由(new_building_path而不是指定控制器和操作) . 这是现在的首选方法;你只需要将“map.resources:buildings”添加到routes.rb即可 . 有几个关于宁静路线的Railscast,如果你有9美元掉线,那就是一个Peepcode .
作为上述评论之一,您可以使用以下方法缩小构建创建代码:
Building.create({:name => "Untitled", :site_id => params[:id]})