Vikhrmodels/habr_qa_sbs huggingface dataset:
Вопрос: Как проверить, имеются ли в строке числа, символы и буквы не латинского алфавита?

Лучший ответ:
Не совсем понятно, что такое цифры и символы латинского алфавита, но думаю вам поможет что-то вроде preg_match("/[^a-zA-Z0-9]/",str,$matches) Если массив $matches не пустой, значит в строке есть что-то, что не входит в группу [a-zA-Z0-9]

Худший ответ:
function testString(s){
      return /[а-яё\d\W_]/gi.test(s);
}
Вопрос: Почему событие onclick перезагружает страницу?

Лучший ответ:
Мой здравый смысл говорит, что onclick ничего не перезагружает, а внутренний телепат утверждает, что просто у вас внутри обработчика нет event.preventDefault() и срабатывает дефолтное поведение контрола (переход по ссылке, отправка формы и т.п.).

Худший ответ:
+1 к предыдущему.
Такая ерунда происходит, если у вас <a onclick"xxxxxx"> - срабатывает дефолтный href на <a> - ведет на текущую страницу. Можно, как вариант поставить <a href="javascript:void(0)" onclick="xxxxx"> - вариант в лоб.
А лучше код скиньте. Сразу все понятно будет.
Вопрос: JavaScipt переключатель, или как отследить показ/скрытие блока?

Лучший ответ:
Да

stackoverflow.com/questions/1875403/jquery-how-to-get-the-style-display-attribute-none-block

Правильный ответ

$('#theid').css('display') == 'none'

или 

$('.deal_details').is(':visible')

Худший ответ:
Если есть jquery,
<a href="#" onclick="$('#yourblock').toggle(); return false">кнопка</a>

Он оперирует с display!

сверстать так, чтоб кнопка была привязана к позиции/наличии этого yourblock
Вопрос: Какое железо выбрать для терминального сервера?

Лучший ответ:
Я в таком случае проводил тестирование. Использовал четыре профиля. Терминальные клиенты идут различных версий (5.0, 6.0, 7.1) в разных версиях Windows. И разница в возможностях и скорости работы у них разная.
Скачал себе mstsc из Windows XP и Windows 7 и тестировал на двух уровнях настроек: всё включено и более щадящий режим. Два на два - получилось четыре профиля.
За четыре 15-ти минутных тестирования собрал данные по загруженности ОЗУ, процессора и сети.
Также занёс в таблицу что сделал за это время (сценарий тестирования). То, что сделал на первом проходе повторил и на втором и на третьем. Одинаковость действий нужна для корректности сравнения результатов. Аутентификация, просмотр отчётов, редактирование документов, ...
А потом рассчитывал на основе этих данных сможет ли работать 20 человек на сервере.
Железо простое, сеть тоже простая. ПО тоже простое - подключиться к терминальному серверу, открыть новую терминальную сессию и подключиться к другому серверу (это куда меньшие требования, чем запустить 1С и офис). Тестирование показало, что мощностей сервера хватает.

Худший ответ:
А это уже обычно, что 1С не внутри LAN офиса? Я имею ввиду безопасность. Или будет еще что-то строится типа VPN?
Вопрос: Спешит время на сервере, как исправить?

Лучший ответ:
Сдается мне что-то с железом.

Худший ответ:
Про что-то с железом присоединюсь к первому оратору, а вообще зачем вы время руками синхронизируете?
Поставьте ntpd или cronyd, пусть они это делают за вас.
Вопрос: Какое выше мнение о JavaScript.ru?

Лучший ответ:
Не соглашусь в предыдущими коментаторами. Сайт сочитает в себе FAQ, как htmlbook для html, как минимум два мануала - по самому js и по nodejs. Просмотрел курс по ноде, многое стало понятно.
Для старта - самое оно. Ну а затем можно брать буржуйскую современную литературу и читать, вникать глубже и глубже.

Худший ответ:
гуано. пока что лучшее что я находил про js это Флэнаган и w3c, mozilla dev
Вопрос: Как создать динамический класс по десериализованному XML или JSON в C#?

Лучший ответ:
Отвечу за JSON. Если я всё правильно понял, то я это делаю с помощью Json.NET таким способом:dynamic parse = JObject.Parse(rawString);
По XML вот stackoverflow.com/questions/13171525/converting-xm... и вот: stackoverflow.com/questions/13704752/deserialize-x...

Худший ответ:
Если только объект анонимного класса. У вас типовой формат XML/JSON или случайный/неизвестный ? Если типовой - то можно сделать свой класс и описать сериализацию/десериализацию.
Вопрос: Какая IDE для обычной C?

Лучший ответ:
CLion посмотрите

Худший ответ:
Жесть тут советы. Под винду юзай Visual Studio, там можно в настройках проекта указать компиляцию Си кода. Под Linux юзай любой текстовый редактор + gcc
Вопрос: Пишу курсовую (тема, GUI )

Лучший ответ:
«600 + строк кода» — говнокода? O_o Я просто не понимаю такие «критерии»!? Это так учат в России?

Худший ответ:
Напишите клиента для использования семантических сетей. вот примеры тут www.visualdataweb.org/tools.php
Вопрос: Правильно ли пишу личное сообщение автору поста?

Лучший ответ:
В верхней строчке где карма и рейтинг, справа нарисован конвертик.
Это и есть личные сообщения.
А заметку видите только Вы и никто больше

Худший ответ:
Заметка - это то, что видите только вы. Такой личный тег для автора.
Личные сообщения - это иконка конвертика справа от цифр рейтинга пользователя.
Если вы ее не видите, то у вас ReadOnly-аккаунт, для них личка недоступна, нужно улучшить аккаунт инвайтом - habrahabr.ru/info/help/registration
Вопрос: Как не подарить свою идею (стартап) спонсорам?

Лучший ответ:
Идеи не стоят ничего. Важны люди, которые готовы воплощать идеи в жизнь.
Если видишь что эти спонсоры больше интересуются идеей нежели тобой и твоим коллегой, то тут одно из двух: они либо глупы, либо действительно думают скопировать идею.

Худший ответ:
ну идея сама по себе не критически важна, многие идеи сами по себе из рынка выходят и из потребностей пользователей, важно в целом виденье и то как люди реализуют это виденье.
само собой если вам нужны еще люди, вы вынуждены будете рассказывать о том что и как вы делаете и куда идёте, конечно не стоит основные хитрости рассказывать например в маркетинге, или монетизации. но о том что за продукт прийдётся рассказывать.
да и вы не потеряете идею, после обсуждения, в любом случае вдвоём будет проще реализовывать, чем всем по отдельности, но даже если он например пожелает один реализовывать этоже самое вы от этого нисколько не проиграете, тк можете подглядывать за их движением и не повторять каких-либо неудачных шагов, и наоборот перенимать то что работает. ну а если он с вами не станет работать, ну от этого вы тоже не теряете, тк он и раньше например над этим проектом не работал.
в общих чертах думаю стоит делиться идеями, от этого сами идеи только становятся лучше, коммерческие же секреты конечно необходимо хранить под семью печатями (коммерческие -> это ноу хау, то что всё таки из идеи делает реально успешный проект)
Вопрос: Как добавить или дописать функцию?

Лучший ответ:
function cs_addto_usermeta_carosel() {
$user_data = get_userdata( get_current_user_id() );
if( 'subscriber' === $user_data->roles[0] ) 
wp_die();
/** Остальной код **/
}
так же вот это вот экшен, он лишний в вашем случаеadd_action("wp_ajax_nopriv_cs_addto_usermeta_carosel", "cs_addto_usermeta_carosel");
Но вообще использовать роли пользователей напрямую, это не очень удобно, гораздо удобнее пользовать сразу возможности

Худший ответ:
Что представляют из себя роли?? как Вы их храните?
Вопрос: Как ie сделать автоскачивание фала?

Лучший ответ:
А просто открыть новой окно как все люди не пробовали?  решит все проблемы

Худший ответ:
Всем спасибо!
Решение нашел тут https://msdn.microsoft.com/ru-ru/library/hh779016(v=vs.85).aspx
Вопрос: Может ли юр. лицо отнять домен?

Лучший ответ:
Неизвестно. 
Мало данных чтобы хоть как то это прогнозировать.
Вообще чтобы претендовать на домен эта организация должна эти претензии как то обосновать.
Совпадение домена с названием юр. лица ни о чем не говорит, и не имеет никакого значения.
Вот совпадение домена, или его созвучность с торговой маркой зарегистрированной юр. лицом это уже другое дело, тут можно попробовать и в суде потягаться.

Худший ответ:
Если приложат усилия то смогут через суд.
Вопрос: Как выстроить обучение по верстке в Wordpress?

Лучший ответ:
0)Освоить английский язык для возможности чтения на нем
1)Освоить HTML
2)Освоить Css
3)Освоить Java Script (jqery)
3)Освоить базово php 
4)Почитать Codex codex.wordpress.org
5)Сделать code.tutsplus.com/series/creating-a-wordpress-them...
6)Взять заказ и сделать - все приходит с опытом

Худший ответ:
Сначала обычная верстка, потом прочтение Codex, создание первых файлов темы и пошаговое добавление в хтмл динамических элементов вордпресс.
Вопрос: Как синхронизировать apple девайс с другим iTunes?

Лучший ответ:
Не сочтите за критику, но именно это меня бесило больше всего в моём iPhone 3G, который пришлось в последствии продать, эра их политика просто ужасная, особенно когда надо было закинуть музыки с другого компа)
Think diffrent © Apple :)

Худший ответ:
Просто экспортируйте iTunes-библиотеку со старого компьютера и импортируйте ее на новый.
Вопрос: Как удалить некоторые элементы массива либо подсчитать их количество?

Лучший ответ:
сложить — кол-во единиц.
отнять от длины сумму — кол-во нулей.
в пхп где-то даже нативные функции есть сложения массива, array_reduce, array_summ.

Худший ответ:
$m = array('1','0','0','1','1','1','1','1','1');
$count = count($m); // количество элементов массива
unset($m[1]); // удалить первый элемент массива
Ещё: my.php.net/manual/ru/ref.array.php
Вопрос: В каком порядке учить c# по тролсену?

Лучший ответ:
Я бы рекомендовал читать вначале всю первую половину (части I - V, главы 1 - 18), а затем читать те остальные части, которые интереснее и важнее для вас. 
Первые пять частей - основы самого языка c# и основы .net. Это пригодится всегда и в любом типе проектов. Разве что, пятая часть не так важна, как предыдущие части, но в любом случае - осознание в пятой части даёт понимание того, как шарп работает вообще.
А вот в остальных частях рассматриваются конкретные технологии - работа с БД и сетевые программы, работа с оконными приложениями, и создание сайтов.
В части VI рассматриваются три подхода работы с БД, каждый из них нужен для изучения, хотя использовать вы будете EF (или LINQ to SQL, который в книге не рассматривается). Также в разделе рассматривается работа с сетевым программированием - как передать денные из одной программы в другую (или из двух экземпляров одной программы). Если это вам сейчас не так важно, то вы можете для начала изучить WPF и/или ASP.NET, а потом вернуться к этому разделу.
Раздел VII рассказывает об оконных программах. Забудьте про WinForms, и используйте WPF - он намного мощнее и удобнее. Единственно, для чего может пригодиться WinForms - это поддержка старых проектов, а также кросс-платформенные платформы (хотя там тоже есть варианты с WPF). В книге не рассмотрены паттерны проектирования, поэтому отдельно изучите паттерн MVVM. Даже сейчас вы не планируете изучать WPF И оконные Win-приложения, то всё равно потратьте время - какой же вы программист, который не может сделать калькулятор? :)
Раздел VIII рассказывает о создании сайтов с помощью ASP.NET. Но этот раздел самый бесполезный из всей книги - сейчас сайты на ASP.NET делаются по другому, чем автор описывает - гораздо лучше использовать ASP.NET MVC (а вскоре выйдет релиз ASP.NET MVC 5.0, где многое также изменится). Хотя этот раздел всё-равно полезный, благо, не очень большой.

Худший ответ:
В порядке приоритета!
Вопрос: Переквалификация в 29 лет: как лучше организовать самообучение front-end'у?

Лучший ответ:
Как уже писали ранее учите не технологии, учитесь решать проблемы. Как правило вам будут ставить задачи/проблемы и заказчикам нужно их сделать/решить - учитесь этому, а технологии это лишь инструменты. Мы за 5 лет назад решали задачи используя одно, сейчас уже все устарело и мы используем другое, через пару лет также все изменится и будем опять все менять, но суть одна и таже, мы всегда решали какие то проблемы и выполняли какие-либо задания и за это получали деньги.

Худший ответ:
Препроцессоры можешь уже начинать, там ничего сложного. Сборщики и Контроль версий по мере роста проектов..  Сам такой же перепрофилофщик :) Нашел знакомых которым нужен был сайт на нем тренируюсь.  Подумываю о курсах. 
Чистый Js чем глубже тем лучше.
Вопрос: Чем заменить элемент?

Лучший ответ:
1) У вас прогрессбар не информативен. Нужно или показать процент выполнения урока, или сколько заданий выполнено (если там есть задания), например 10/100.
2) Выполненные уроки юзеру уже нафиг не нужны. Поэтому их не надо явно выделять (как у вас зелёным), а лучше наоборот приглушить, чтобы внимание юзера привлечь к ещё не выполненным урокам.
3) Выкинуть в утиль все эти рамки от которых нет никакого толку.

Худший ответ:
Ну я бы только прогрессбар и название местами поменял (т.е. разместил прогрессбар справа), хотя не уверен что это правильно будет.
Остальное мне кажется вполне нормальным. Разме что можно добавить какую-нибудь пиктограмму, которая делала бы более очевидным куда нажимать (какую-нибудь кнопочку "начать" к каждому уроку, которая я бы работала одновременно с текущим способом входа)
Вопрос: Как запретить одновременное подключение к openvpn с одинаковым сертификатом?

Лучший ответ:
такое поведение, судя по всему, by design--duplicate-cn Allow multiple clients with the same common name to concurrently connect. In the absence of this option, OpenVPN will disconnect a client instance upon connection of a new client having the same common name. 
С отключенной опцией (по-умолчанию) новый клиент "выбивает" старого. Нигде не говорится, что новый просто не сможет подключиться. Т.е. по умолчанию просто в одно время один клиент. Последний

Худший ответ:
Нужно ограничить количество конкурентных подключений 
Разрешаем в конфиге duplicate-cn. Первый подключится. Подключение второго режем скриптом
Кто первый встал - того и тапки :-)
Вопрос: Возможно ли парсить страницу Javascript'ом и сохранять ее результаты?

Лучший ответ:
Гулять по DOМ-элементам и собирать их них данные - запросто. Можно вертеть все элементы страницы и их содержимое как душе угодно, иначе зачем вообще js был бы нужен.
Сохранять в файл - вряд ли, из-за ограничений на отправку запросов по протоколу file://. Как бы то ни было, собранные данные, опять же, можно представить как угодно в формате веб-страницы, которую потом в крайнем случае можно руками сохранить. Если ух очень хочется просто и красиво всё автоматизировать, то логично посмотреть в сторону тех же Groovy, Python и иже с ними.

Худший ответ:
Как-то нужно было полностью сохранить себе ресурс, но через php был не вариант - много JS в клиентской части.
Сделал плагин под greazemonkey для FF и парсил.
Вообще не проблема. Если jQuery есть, то все элементарно. по ID, классу или просто по дереву DOM элементы находятся и делаешь с ними, что хочешь.
Было давно. Для сохранения в файл я просто полученный и переделанный в JS код отправлял через iFrame (Aajx на другой хост не отправляет) на php на сервер.
Вопрос: Может ли прерываться работа PHP скрипта при закрытии браузера?

Лучший ответ:
Да, при разрыве соединения с клиентом работа длительного скрипта прерывается, для того что бы этого не происходило поставьте в начале скрипта:ignore_user_abort(true);
В этом случае скрипт всегда будет работать до конца даже если браузер был закрыт.

Худший ответ:
Если у вас php-fpm, то используйте в вашем скрипте fastcgi-finish-request. Функция сразу заставляет браузер вывести ответ, но скрипт продолжит выполняться.
Вопрос: Какой изоморфный роутер выбрать для ReactJS?

Лучший ответ:
По мне так react-router - лучшее решение. С гет запросами проблем ни каких, потому что он не обрабатывает гет запросы)
Все библиотеки новые, эта ниша только развивается, так что решений "проверенных временем" сейчас нету.UPD1:
copal: вот только что тыкал как псих - все работает. Если только загрузить страницу и сразу кликнуть - может возникнуть ситуация, что роутер еще не включился и тогда ссылка отработает как простая ссылка - с сервера загрузится новая страница.

Худший ответ:
Юзаю react-router последней версии. Всё путём. Единственное чего не хватает - нормальной динамической маршрутизации (например для авторизованного пользователя - одно, для неавтаризованного - другое). Но это вполне таки допиливается руками
Вопрос: Есть ли аналог teamtreehouse.com или похожий сервис ?

Лучший ответ:
В it без знания хотя бы технического английского делать нечего.
90% материалов не переводятся и никогда не будут переведены на русский, а еще 9% - будут переведены через года 3 когда нафиг будут никому не нужны.
Так что учите язык. За годик можно приноровиться

Худший ответ:
Мне кажется вам лучше обратиться в платную бизнес-школу, где изучают примерные темы. Там вы хоть крепкие знания получите. Попробуйте к примеру inoprof.ru, возможно он есть в вашем городе.
Вопрос: Нужно ли при POST запросе делать reducer в redux'е?

Лучший ответ:
Редьюсер нужен когда Вы хотите хранить состояние. Это может быть, например, статус запроса - упех/в процессе/ошибка. И исходя из этого сделать кнопку "отправить" не активной, показать индикатор загрузки и т.д.

Худший ответ:
Редьюсер нужен когда Вы хотите хранить состояние. Это может быть, например, статус запроса - упех/в процессе/ошибка. И исходя из этого сделать кнопку "отправить" не активной, показать индикатор загрузки и т.д.
Вопрос: Как передать событие с сайта на vps сервер?

Лучший ответ:
>9000 способов. 
гуглите на тему "клиент-сервер". 
в вашем случае 
1. Кнопка - клиент, Apache + php - сервер. Тут аякс или родные браузеру контролы для отправки запроса на сервер. 
2. Сервер 1 - клиент на php, Сервер 2 - сервер. Клиент на php может практически по любому протоколу стукнуться на виндовый ваш сервак, тут >9000 вариантов. Выбирайте чем проще обработать запрос на виндой стороне чтобы дёрнуть нудный экзешник.
PS либо, если не клиент-сервер архитектура, то можно посмотреть в сторону подписок и событий: 
1. есть накая шина (м.б. в виде третьего сервера даже =) очередь сообщений, например) доступная обоим серверам. 
2. php после нажатия кнопки кладёт туда событие
3. под виндой кто-то слушает событие и при наступлении дёргает экзешник. 
Опять таки, реализация зависеть будет скорее всего от того что легче на стороне винды использовать окажется. И опять 100500 вариантов можно придумать.

Худший ответ:
Передаем:<?php
  if( $curl = curl_init() ) {
    curl_setopt($curl, CURLOPT_URL, 'http://mysite.ru/receiver.php?a=5&b=10');
    curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
    $out = curl_exec($curl);
    echo $out;
    curl_close($curl);
  }
?>
Получаем:receiver.php<?php
  $a = $_GET['a'];
  $b = $_GET['b'];
  echo $a + $b;
?>
Научитесь пользоваться гуглом.
Вопрос: Как сделать округленную рамку с градиентом?

Лучший ответ:
К сожалению сделать закругление border-image невозможно.
Как вариант, можно блок с border-image обернуть в div, а div'у задать нужное округление и overflow: hidden;

Худший ответ:
Закруглить углы:border-radius:20px;
Значения можно как в пикселях так и в процентах задавать. Можно задавать скругление отдельно стороне и даже половине угла.
jsfiddle.net/bmowdd3d/2
Вопрос: Как одновременно постить обновления блога в Facebook, Google+, Вконтакте?

Лучший ответ:
В контакте можно писать на стену с помощью e-mail. Запоминаете этот e-mail и на IFTTT.com, делаете схему «Новый пост в ФБ» -> «Письмо на e-mail», и указываете это мыло. У меня так работает репост Twitter -> Вконтакте. Правда, не знаю, есть ли такое в G+.

Худший ответ:
Смотри подобное twitterfeed, с вконтактом могут быть заморочки правда, импортные сервисы его не поддерживают.
Вопрос: Есть ли portable аналог __attribute__((noinline))?

Лучший ответ:
По идее, данная вещь должна чиниться правильно расставленными барьерами…

Худший ответ:
У вас где-то в другом месте проблема, а это не решение, а просто уход от неё.

Портабельного аналога в стандарте нет. А Clang понимает __attribute__((noinline)).

Но если у вас там действительно всякие нестандартные атомики, то:

1. используйте стандартные атомики;

2. используйте ordered атомики;

3. используйте барьеры (или для процессора, или только для компилятора asm volatile("":::"memory"););

4. выясните, почему компилятор себе позволяет делать reordering вокруг ваших ассемблерных вставок или интринсиков. Баг компилятора?

А то потом придёт какой-нибудь link-time optimization и снова всё вам сломает.

И да, вы уверены что вы правильно написали свою критическую секцию? И зачем?
Вопрос: Какое ваше мнение о Drupal?

Лучший ответ:
1) Почему считается, что друпал сложно темизировать?
Друпал сложно правильно темизировать. Достаточно тяжело понять всю систему из theme функций/файлов, preprocess/process функций, theme sugestions, render массивов, различных pre_build/after_build/post_build калбаков, theme врапперов, кэширования и т.п. Наговнокодить прямо в шаблоне большого ума не надо.2) Действительно ли друпал очень медленный?
Друпал, как и любая другая CMS, медленнее узкоспециализированных систем в виду  своей избыточности. Голый друпал 7 на средней машине генерит странички за ~100 ms. Решайте сами, это очень медленно или нет.3) Этот вопрос к тем, кто имел дело с интернет-магазинами на друпале: стоит ли вообще делать на нем интернет-магазины?
Если нет хорошего скила или денег на соответствующего разработчика, то не стоит.4) Если вы имели дело с формами на сайте, подскажите, как лучше их реализовать, чтобы получился некий аналог форм в битриксе
Популярно — Webform. Правильно — Entityforms.6) Действительно ли вам показался друпал сложным в освоении (как программистам, разумеется) в сравнении с другими системами?
Нет. Какой-нибудь Symfony 2 на порядок сложнее будет.7) Как вы темизировали хлебные крошки и постраничную навигацию? На мой взгляд, разработчики друпала были сильно не правы, не реализовав их через файлы шаблонов.
Они реализованы theme функциями theme_breadcrumb и theme_pager. Функции мало чем отличаются от шаблонов — их так же можно переопределять, процессить и использовать через theme('...').

Худший ответ:
если для интернет магазина - посмотрите в сторону opencart , шустрый, модули, MVC. Очень нравиться  мне.
Вопрос: Как разобратся с MVC?

Лучший ответ:
В представлении AR
Model = Таблица
экземпляр Model = запись из таблицы,
что мешает получать записи по одной в цикле из нужной таблицы и записывать в массив. На выходе получается массив или коллекция. Собственно современные ORM это и делают.
Например получение всех записей из таблицы категорий (модель Categories) в большинстве современных фреймворков выглядит примерно так:$categories = Categories::all()
На выходе в переменной $categories получаем коллекцию (по сути массив каждый элемент которого является объектом модели Categories):Collection {#168 ▼
  #items: array:5 [▼
    0 => Categories {#169 ▶}
    1 => Categories {#170 ▶}
    2 => Categories {#171 ▶}
    3 => Categories {#172 ▶}
    4 => Categories {#173 ▶}
  ]
}
Вы можете пробежаться по этому массиву и получить нужную запись. Никаких проблем. 
Утрированно:
Controller - управляет. 
Если это Посты, то ими надо управлять, действовать. Методы (actions, действия) работы с Постами, например create, delete, update, edit. Логично было бы предположить что для управления Постами нужен PostsController.
Комментарии - свой набор действий (action) логично предположить что для них следовало бы сделать отдельный контроллер CommentsController, который содержал бы логику управления только Комментариями, а не всем на свете(например Пользователями). Вы всегда будете знать что Комментариями управляет CommentsController, Постами - PostsController. Более того, если кто-то другой откроет ваш код, то он сделает логичное предположение, что за Посты у вас отвечает PostsController и начнет работать/ломать оттуда.
Не зацикливайтесь сильно на теории. Пишите код, и чаще выводите var_dump()-ом промежуточные результаты, вы будете видеть как устроено данные, и начнете понимать как к ним подобраться.
Создайте объект класса (Модели), сделайте запрос, выведите дампом и посмотрите как устроены данные. Вы наглядно увидите объект это или массив, или ни то, ни другое, ни третье )).

Худший ответ:
Стоит посмотреть на это так:
Есть несколько страниц, страница - модель.
Есть комментарии, связаны со страницей отношением один-ко-многим(has_many в терминах RoR). То есть одна страница - N комментариев.