частичная загрузка с помощью jquery и рельсов - PullRequest
9 голосов
/ 09 февраля 2010

Мне интересно, как лучше всего загрузить частичку рельсов с помощью jquery. До сих пор я пробовал решение не работает:

$('#imagecontent').load('/newsletters/_image_gallery.html.erb', function() {
alert('Load was performed.');
});

Это лучшее решение для создания отдельного действия и / или контроллера для этого и настройки маршрута? Я спрашиваю, потому что заставить первое решение работать легче, возможно, не так спокойно.

Спасибо.

Ответы [ 5 ]

8 голосов
/ 09 февраля 2010

У вас не должно быть доступа к файлам шаблонов (.erb) из HTTP-запросов, это очень плохая практика.Я предлагаю вам поместить их за пределы пути вашего веб-сервера и получать к ним доступ только через ваше приложение.

Я не уверен насчет Rails, но я полагаю, что для этого вам нужно создать отдельный контроллер (или что-то еще).

РЕДАКТИРОВАТЬ это потому, что файлы .erb являются встроенными файлами Ruby, и если вы попытаетесь запросить их, вы получите все нежелательные данные, такие как <%= page_title %>, которые вам не нужныпоказать пользователям.Поэтому вам нужно передать эти .erb файлы через приложение Rails, чтобы они правильно интерпретировались в HTML.

3 голосов
/ 16 мая 2012

Другая альтернатива:

$('#imagecontent').html('<%= escape_javascript render 'newsletters/image_gallery' %>');
3 голосов
/ 21 апреля 2012

С рельсами 3 вы можете сделать ...

Контроллер

@content = '/some/partial'

view - либо haml.erb (html.erb), либо js.erb

$('#myDiv').html("<%= escape_javascript render @content %>");

Вы можете попробовать это, если rails 2 (доступен только прототип, если не добавлен noConflict) ...

В контроллере

@content = render :partial=>"/users/cool_partial"

Позвоните своему js

myFunction(#{@content.to_json})

Ваша функция ...

myFunction = function(content){

    $("myDiv").html(content);

}

Я согласен с нейтрино в том, что с этим можно справиться с помощью действия.

def get_partial
  render 'some/partial'
end

Надеюсь, это поможет

3 голосов
/ 12 июля 2010
3 голосов
/ 09 февраля 2010

Причина, по которой код не работает, заключается в том, что rails не предоставляет доступ к файлам вида снаружи.Чтобы добиться того, чего вы хотите, вам понадобится действие, которое отрендерит этот фрагмент:

def image_gallery
  render :partial => "image_gallery"
end

Также есть плагин jRails, который заменяет стандартные помощники ajax (которые используют прототип) эквивалентными jquery-ориентированнымииз них.В вашем случае вы бы использовали что-то вроде

<%= remote_function(:update => "imagecontent", :url => "/newsletters/image_gallery") %>

И даже больше, в Rails 3 вам это не понадобится.Смотрите эту ссылку .

...