首页 文章

(Ruby,Rails,Javascript)当Javascript被禁用时重定向/渲染不同的页面......?

提问于
浏览
0

我在使用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 回答

  • 0

    我相信解决方案在于“link_to_remote”而不是任何特定的控制器 . 以下似乎有效:

    <div><%=link_to_remote "NEW BUILDING", {:url => {:action => "add_building", :id => site.id}},
                {:href => url_for(:controller => "buildings",:action => "new")}%></div>
    

    如果你们有更好的建议,请务必张贴 . 再次感谢 .

  • 0

    您是否尝试过编写表单以便重定向到另一个页面,然后在页面加载时使用ajax-y js覆盖一些js?这样,如果禁用js,页面将按预期重定向 .

  • 0

    提到的link_to_remote解决方案可能会有效,但是如果你正在寻找一种不引人注目的方法,你可以使用这样的一些javascript(jQuery):

    在.html.erb文件中:

    <%=link_to "New Building", new_building_path, :id => 'new_building_link' %>
    

    在javascript文件中:

    $(document).load(function() {
      $("#new_building_link").click(function() {
        $.ajax({
          type:     "POST",  # or whatever http method you need
          url:      "/buildings/add_building",
          dataType: "script"
        });
        return false;
      });
    });
    

    然后返回一些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]})

相关问题