Ajax on Rails - у меня проблема - PullRequest
0 голосов
/ 21 сентября 2010

Я работаю над веб-приложением Ruby on Rails, в котором у меня есть несколько списков постов.Каждый пост будет использовать Ajax для загрузки своих комментариев.Для того, чтобы заполнить их в нужном месте, я делаю следующее:

В каждом сообщении есть div с идентификатором в следующем формате: <div id="my_div_<%= post.id %>"></div>.Так, например, если post.id равен 12, идентификатор будет «my_div_12».

Действие моего контроллера выглядит следующим образом:

render :update do |page|
    page.replace_html 'my_div_' + params[:post_id].to_s, :partial => 'my_comments_section_partial_path'
end

Это прекрасно работает, только если у меня естьразместить только один раз на странице.Но на этом сайте каждое сообщение может быть указано более одного раза, потому что есть несколько списков (последние сообщения, популярные, топы и т. Д.).И у каждого из них будет свой раздел комментариев для показа.

Проблема теперь в том, что, поскольку функциональность раздела комментариев находится внутри частичного представления, он будет работать одинаково для каждого типа списка (как и ожидалось)и, следовательно, это не имеет значения между divами (потому что у них будет один и тот же post.id и, следовательно, один и тот же id div).

Мой вопрос теперь таков: как я могу решить эту проблему?проблема?Есть ли лучший и другой способ сделать это?

Заранее спасибо!

РЕДАКТИРОВАТЬ:

Просто чтобы уточнить, что я хочу, в несколькихслова:

Я бы хотел, чтобы код page.replace_html 'my_div_' + params[:post_id].to_s, :partial => 'my_comments_section_partial_path' заменил этот частичный элемент в КАЖДОМ div , называемом 'my_div' + params[:post_id].to_s (поскольку на одной странице может быть более одного элемента стот же идентификатор) .

Ответы [ 2 ]

1 голос
/ 22 сентября 2010

Обратите внимание, что наличие нескольких элементов с одинаковым идентификатором на одной странице приводит к технически недопустимому html.Многие браузеры даже не отображают все эти атрибуты id (оставляя один и стирая остальные).

Одно простое решение - перейти на использование классов вместо идентификаторов.Может быть несколько элементов с одним и тем же классом, и каждый элемент может иметь более одного класса.
Я не работаю со встроенными помощниками ajax в Rails, но Google предлагает это возможно .

0 голосов
/ 22 сентября 2010

Похоже, у вас есть два набора сообщений на одной странице, и вы беспокоитесь о том, чтобы разместить комментарии для правильного сообщения в правильном месте. Я думаю, что сделать два запроса Ajax было бы хорошо. URL-адреса, вероятно, будут что-то вроде /posts/1/comments и /posts/2/comments. По сути, вы хотите, чтобы «все комментарии для данного поста». У вас может быть действие комментариев на вашем контроллере сообщений, чтобы использовать вашу has_many :comments связь с Post. Используя параметр URL ID, вы можете указать идентификатор сообщения. Вы можете получить Post ID из разметки через пользовательский атрибут ID, пользовательский класс или атрибут custom data- * .

Похоже, вы используете RJS, но я бы рекомендовал использовать Prototype или jQuery, чтобы сделать запрос Ajax и указать в качестве ответа данные JSON или HTML, а затем добавить JSON или HTMl в правильное место.

В jQuery я бы взял идентификатор поста, сделал запрос ajax, а затем добавил HTML-комментарий. Это не проверено, но примерно идея в коде.

var comments_div = $('.post .comments'); /* need a diff. comments div for each */
var post_id = $('.post').attr('data-post_id');
$.get({'/posts/'+post_id+'/comments', function(data){ comments_div.append(data); }  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...