0

我在使用 Rails、Javascript 和重定向时遇到了严重问题。基本上,如果禁用 JS,我有重定向到不同页面的“简单”问题。如果启用了 JS,那么我会立即内联添加一个新项目——这就像一个魅力。但是,如果 JS 被禁用,我想重定向到不同控制器的 NEW 页面。基本上模型设置是这样的:

Site -> Buildings -> Controllers (not to be confused with Rails "controllers")

我有一个“SiteManagerController”,它使用 JS 来管理整个事情。基本上我有一个场景,我正在尝试执行以下操作:

1) 如果启用了 JS,我想添加内联项 2) 如果禁用了 JS,我希望渲染 ":controller => building, :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

这不起作用。值得一提的是,在查看页面源代码时,没有迹象表明启用 JS 和禁用 JS 有什么不同。所有链接看起来都一样——即 Ajaxy。

我知道这不应该是一个如此复杂的问题,但我很困惑。

最好的。

PS 请不要更改这篇文章的标题。;)

4

3 回答 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>

如果你们有更好的建议,一定要发帖。再次感谢。

于 2009-06-20T01:06:18.833 回答
0

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

于 2009-06-20T01:10:04.707 回答
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,这些 JS 将更新您要更改的页面区域。

我确信使用 Prototype(rails 的默认 JS 库)也有类似的方法,但我不知道 Prototype。

另请注意,这使用了 restful 路由(new_building_path 而不是指定控制器和操作)。这是现在的首选方法;您只需将“map.resources :buildings”添加到 routes.rb。有几个关于宁静路线的 Railscasts,如果你有 9 美元可以放弃,一个 Peepcode。

作为提到的评论之一,您可以使用以下方法缩小您的建筑创建代码: Building.create({:name => "Untitled", :site_id => params[:id]})

于 2009-06-20T02:24:28.787 回答