2009-06-20 2 views
0

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

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

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

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

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

Защиту add_building @building = Building.new @ building.name = "Без названия" @ building.site_id = PARAMS [: идентификатор] @ building.save respond_to сделать | формат | format.html {redirect_to: контроллер => "здание",: действие => "новый"} format.js конца конца

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

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

Лучший.

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

+0

Вы могли бы сократить все @building вещи в 'Building.create ({: имя =>«Без названия»,: site_id => params [: id]}) '. :) – epochwolf

+0

Да, это aaaaaall остатки от попыток быть настолько подробными, насколько это возможно. Спасибо хоть. –

ответ

0

link_to_remote решение упоминалось вероятно, будет работать, но если вы ищете ненавязчивый способ сделать это, можно использовать некоторые JavaScript (JQuery), как это:

в вашем .html.erb файле:

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

в яваскрипта файле:

$(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.

Также обратите внимание, что для этого используются спокойные маршруты (new_building_path, а не указание контроллера и действия). Это предпочтительный метод; вам просто нужно добавить 'map.resources: buildings' to routes.rb. Есть пара Railscasts о спокойных маршрутах, и если у вас есть 9 долларов США, вы можете сделать Peepcode.

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

+0

Да, в основном я стараюсь быть максимально подробным (в краткосрочной перспективе), сохраняя его RAILScentric (например, используя обертку вместо явных вызовов JS). Но мне нравится ваше предложение. Он подтверждает, что решение лежит в ссылке (-ах), а не на контроллере. Благодарю. –

+0

, если вы хотите, чтобы это было как можно проще, и не против навязчивого JS, то использование link_to_remote и указание href, вероятно, будет вашим лучшим выбором, как предполагает первый ответ. – zgchurch

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

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

+0

Я не уверен, что он приближается к нему с правильного направления. В принципе, представляйте веб-интерфейс «GUI», в котором вы можете добавлять и удалять элементы. Если JS включен, я просто хочу щелкнуть ссылку ADD и создать новый «пустой» элемент. Однако, если JS отключен, я хочу, чтобы вас перенесли на страницу NEW для элемента. Куда я иду после формы, не имеет никакого отношения к делу - хотя я захочу снова перенаправить на исходную страницу. –

Смежные вопросы