@related
уже включает все сообщения, вам нужно удалить текущий пост из списка или пропустить его в итерации:
Исключить текущий пост перед итерацией
<% @related[@post.blog_category_id].reject { |post| post == @post }&.each do |rel| %>
[ 113] или просто пропустите итерацию, если текущая является рассматриваемой статьей:
<% @related[@post.blog_category_id]&.each do |rel| %>
<% next if rel == @post %>
Вопросом не является необычный. Все же после 5 дней, ища Интернет Вы все еще не нашли удовлетворительный ответ. Это сам по себе должно быть довольно простым индикатором.
То, что я нашел в сети, существует серьезное отвращение к, 'нет может сделать' ответ. Когда что-то не может быть сделано, нормальный ответ не должен делать ответ.
Нижняя строка не, только может, что Вы пробуете, не сделаны, она не должна быть сделана.
Я думаю, что необходимо вернуться к старшим и объяснить им, что сеть UI является гостем, размещенным браузером на клиентской машине. Это гостевое состояние является важным.
Вы хотели бы, чтобы гость в Вашем доме имел право осуществлять Вас для предупреждения их, когда Вы хотите перейти к туалету? Нет?
Так же браузер ограничивает, к какой информации гость UI позволяют получить доступ. Даже при нахождении обходного решения для того, что браузеры не бросают эту информацию добровольно, такие умные взломы хрупки и вероятны быть постоянным источником ошибок.
Так как его вероятное, которое приложение было первоначально предназначено, чтобы быть поставленным через браузер перед любым кодом, было сокращено, вина лежит на включении требования во-первых.
Все, что мы можем сделать, сочувствует Вам в том, чтобы быть попросившимся выполнить невозможную близость и конечно не разумное требование.
У меня есть метод, который является немного неуклюжим, но он будет работать в большинстве экземпляров.
Создайте всплывающую страницу "Содержания", содержащую FRAMESET с одним, 100%-й единственный КАДР, и поместите нормальный onUnload и onbeforeUnload обработчики событий в ГОЛОВЕ.
<html>
<head>
<script language="Javascript" type="text/javascript">
window.onbeforeunload = exitCheck;
window.onunload = onCloseDoSomething;
function onCloseDoSomething()
{
alert("This is executed at unload");
}
function exitCheck(evt)
{
return "Any string here."}
</script>
</head>
<frameset rows="100%">
<FRAME name="main" src="http://www.yourDomain.com/yourActualPage.aspx">
</frameset>
<body>
</body>
</html>
Используя этот метод Вы свободны использовать фактическую страницу, которую Вы хотите видеть, отправить назад и гиперссылки щелчка без внешнего кадра onUnload или onbeforeUnload запускаемого события.
Если внешний кадр будет обновлен или на самом деле закроется, то события будут стрелять.
Как я сказал, не полно-защищенный, но обойду увольнение события на каждой обратной передаче.
В Вашей функции:
document.onclick = function()
{
//To check if user is navigating from the page by clicking on a hyperlink.
if (event.srcElement.tagName == 'A')
blnShowMsg = false; //To not popup the warning message
else
blnShowMsg = true; //To popup the warning message
}
blnShowMsg будет верен для любого, нажимают на Вашу страницу кроме иногда, когда пользователь нажимает на ссылку. Я иногда говорю, потому что, если event.srcElement.tagName не работает в некотором браузере, это всегда будет верно. И необходимо добавить много случаев к позволить использовать средства управления формой и т.д... Некоторые браузеры могут даже автоматически перезагрузить страницу, и я не уверен, будут ли onload события работать затем или нет.
Но сование предупреждения об отъезде страницы (или подобный) все время, несомненно, будет раздражать много людей, и они, вероятно, уедут постоянно...
Если Вы сделаете, например, программу онлайн, где очень важно, что что-то сохраняется перед отъездом я скажу, что ловля прежде разгружается, событие является немного слишком поздним, лучше для создания некоторого автосохранения (см. Gmail), и/или некоторое ненавязчивое предупреждение, когда пользовательское наведение мыши навигация menues без сохранения.
Но Вы не можете вынудить глупых пользователей не сделать что-либо глупое, на веб-интерфейсе это еще более верно, потому что Вы имеете меньше контроля: если пользователь захочет завершить программу прежде, чем сохранить, то они найдут способ сделать так, и они будут звонить Вам и жаловаться когда несохраненные данные dissapears; P
Я полагаю, что были некоторые способы сделать это в некоторых браузерах (и вероятно не очень надежно) несколько лет назад. Поскольку я помню те ужасные крупные всплывающие окна спама, которые породили больше всплывающих окон, когда Вы закрыли тот. Но вот почему это не хорошая идея позволить сценариям обнаруживать это, и почему браузеры должны предотвратить его, и самые современные браузеры, вероятно, делает.
Меня попросили сделать что-то подобное для сценария приглашения для участия в опросе; они хотели спросить посетителя, если они хотели бы ответить на обзор о своем веб-сайте, и затем обзор должен открыться, когда они покидают сайт. Решение, которое я нашел, состояло в том, чтобы (неоднократно) объяснять управление, что это было, вероятно, невозможно, или в лучшем случае очень ненадежно; и вместо этого обзор должен сразу раскрыться (если бы посетитель согласился провести исследование), и вводная страница должна сказать, что посетитель для отъезда этого окна открывается и возвращается к нему после рассмотрения страницы.
"Спасибо приятель, но я уже прошел это и не нашел много справки там также. Мои старшие не довольны тем решением, поскольку помещение флага на ссылке Эври моего приложения является сложным заданием, и они боятся повреждения приложения. Любые другие предложения ценились бы. Спасибо еще раз".
При использовании jQuery можно добавить флаги ссылки автоматически. Путем я решил бы Вашу проблему, когда пользователь выполняет "опасные" действия, выполните итерации всех ссылок страницы, которые "опасны" и затем связывают события с ними.
$("#dangerbutton").click(function(){
$("a").not( safeList ).click(function()
{
var dest = $(this).attr('href');
someWarningFunction(function(){
/* Stay where we are because user opted to stay */
},function(){
/* Continue Following Link because user didn't mind */
window.location= dest;
});
return false;
});
});
Этот путь будет только стрелять в ссылку, нажимает на Вашу страницу. Пользователи должны привыкнуть к тому, которые "закрывают окно ==, отменяют все" логика, потому что многие используют и доверяют тому средству.
Вы могли видеть на многих страницах веб-форм предупреждение пользователя перед закрытием страницы. Когда кто-то обновляет страницу, есть вероятность потери всех заполненных данных. В таком случае это очень полезно.
Жизненный цикл страницы включает два события, например onunload и onbeforeunload. В этом случае вам нужно привязать функцию скрипта в window. Onbeforeunload, чтобы он вызывал при выгрузке страницы.
Опять же, это предупреждение не должно появляться, когда вы фактически отправляете страницу. Для этого установите логическое значение (например, shouldsubmit) для отправки страницы.