В моем приложении для блога некоторые сообщения отображаются в виде выдержек, то есть пользователь видит первые (скажем) 500 символов и может щелкнуть ссылку, чтобы просмотреть все сообщение. Вот соответствующий частичный:
<% href = url_for post_path(:id => post) %>
<h1 class="title"><%= post.title %></h1>
<h2 class="published_on"><%= post.author %> wrote this <%= time_ago_in_words(post.published_on)%> ago</h2>
<div class="body">
<% if defined?(length) %>
<%= truncate_html(post.body, :length => length, :omission => "…<h1><a class='more' href=\"#{href}\">Click here for more!</a></h1>") %>
<% else %>
<%= post.body %>
<% end %>
</div>
Тем не менее, вместо "Нажмите здесь для более!" Перенос пользователя на отдельную страницу, я бы хотел, чтобы остальная часть поста была заполнена. В настоящее время я реализую это, поместив приведенный выше фрагмент в следующий div:
<div class="post" id="post_<%= post.id %>">
<%= render :partial => 'post_content', :locals => { :post => post, :length => 500 } %>
</div>
Затем я использую идентификатор этого div в моем application.js для выполнения AJAX:
$(document).ready(function() {
$("a.more").click(function() {
var url = $(this).attr('href');
var id = url.split("/")[2]
$.get(url, null, function(data) {
$("#post_" + id).html(data);
});
return false;
});
});
Это явно отвратительно - я не хочу, чтобы мой javascript зависел от местоположения идентификатора поста в href ссылки, но я не знаю другого способа узнать, какой пост он получает, и следовательно, в какой div должен быть вставлен контент.
Какой лучший способ сделать это? Должен ли я просто вернуться к использованию помощников рельсов AJAX?