(Ruby, Rails, Javascript) Перенаправление / рендеринг другой страницы, когда Javascript отключен ...? - PullRequest
0 голосов
/ 20 июня 2009

У меня серьезные проблемы с Rails, Javascript и перенаправлениями. По сути, у меня есть «простая» проблема перенаправления на другую страницу, если JS отключен. Если JS включен, то я сразу добавляю новый элемент в строке - это работает как шарм. Однако если JS отключен, я хочу перенаправить на страницу NEW другого контроллера. В основном настройки модели таковы:

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

У меня есть «SiteManagerController», который использует JS для управления всем этим. По сути, у меня есть сценарий, в котором я пытаюсь сделать следующее:

1) если JS включен, я хочу добавить элемент встроенным 2) если JS отключен, я хочу сделать ": controller => здания,: действие => новый"

Мой "link_to_remote" прост. Как я уже сказал, это работает для JS. Код моего рельсового контроллера следующий:

def add_building @building = Building.new @ building.name = "Без названия" @ building.site_id = params [: id] @ building.save ответить | сделать | форматировать | format.html {redirect_to: controller => "Buildings",: action => "new"} format.js конец конец

Это не работает. Для чего это стоит, при просмотре источника страницы нет никаких признаков того, что что-то отличается, когда JS включен против отключен. Все ссылки выглядят одинаково - т.е. Ajaxy.

Я знаю, что это не должно быть такой сложной проблемой, но я довольно озадачен.

Best.

P.S. Пожалуйста, не меняйте название этого поста. ;)

Ответы [ 3 ]

0 голосов
/ 20 июня 2009

Вы пытались написать форму так, чтобы она перенаправляла на другую страницу, а затем запускали некоторые js при загрузке страницы, которая перезаписывает это с вашими ajax-y js? Таким образом, если js отключен, страница будет перенаправлена ​​должным образом.

0 голосов
/ 20 июня 2009

Упомянутое решение 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, библиотекой JS по умолчанию для рельсов, но я не знаю Prototype.

Также обратите внимание, что при этом используются маршруты отдыха (new_building_path, а не указание контроллера и действия). Это предпочтительный метод сейчас; вам просто нужно добавить «map.resources: Buildings» в router.rb. Есть несколько Railscasts о спокойных маршрутах, и если у вас есть $ 9 для сброса, Peepcode.

В качестве одного из упомянутых комментариев вы можете уменьшить свой код создания здания, используя: Building.create({:name => "Untitled", :site_id => params[:id]})

0 голосов
/ 20 июня 2009

Я считаю, что решение заключается в "link_to_remote", а не в каком-либо конкретном контроллере. Кажется, работает следующее:

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

Если у вас, ребята, есть лучшие предложения, обязательно пишите. Еще раз спасибо.

...