Как ограничить количество символов, возвращаемых запросом с помощью Sequel и Ruby?

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

Как бы я сделал это с Sequel?

Я думал, что это может быть использование limit, но это просто ограничивает количество записей, возвращаемых из базы данных.

В идеале я хотел бы сделать что-то вроде: Article.first.limit(40), где 40 — это первые 40 символов.

Я знаю, что limit не сработает, но я просто использую его как пример, чтобы проиллюстрировать то, что я ищу.


Редактировать 1:

Я использую Синатру. Я хотел ограничить возвращаемые значения, но из представления, а не из файла маршрутизации.

Я делаю что-то подобное в файле маршрутизации:

@section = HelpSections.filter(:type => 'a').order(:sort, :name)

Что дает мне список всех разделов типа a.

Затем, чтобы перейти к статье, я делаю:

@section.each do |article|
     article.question.each do |title|
         title.name[0..9]
     end
end

Основываясь на этом сценарии, я хочу ограничить размер возвращаемого атрибута «имя».

Но, когда я это делаю, я получаю эту ошибку:

undefined method '[]' for nil:NilClass

Как мне справиться с этим, чтобы я мог ограничить размер атрибута name?


person marcamillion    schedule 11.11.2011    source источник
comment
Проблема в том, что title.name возвращает nil (ничего). Вы уверены, что не имели в виду что-то вроде этого: @section.each do |article| article.name[0..9]   -  person Alex Peattie    schedule 12.11.2011
comment
Извините, я добавил article.question.each do |title|... он не должен возвращать nil, если анализирует символы в статье. Если я делаю article.name, он возвращает полное значение (длинное). Когда я делаю article.name[0..9], именно тогда он жалуется, что наводит меня на мысль, что он может искать запись по имени, а не анализировать символы... если это имеет смысл.   -  person marcamillion    schedule 12.11.2011
comment
Попробуйте article.name.to_s[0..9]   -  person Alex Peattie    schedule 12.11.2011
comment
Отлично... это именно то, что мне было нужно. Это работает. Спасибо!!!   -  person marcamillion    schedule 12.11.2011
comment
Вы можете обновить свой ответ, если хотите, чтобы более точно отразить обновленный вопрос.   -  person marcamillion    schedule 12.11.2011


Ответы (1)


Не могли бы вы просто сделать что-то вроде этого?:

Article.first[:body][0..39]

Если вам действительно нужно сделать это через SQL, вы можете сделать что-то вроде этого:

Article.select {|a| a.substr(:body, 1, 40) }

(Возможно, вам придется использовать .substring вместо substr в зависимости от вашей БД)

person Alex Peattie    schedule 11.11.2011
comment
Привет, Алекс... еще один вопрос... Я собираюсь обновить вопрос о том, как я могу справиться с этим в представлении. - person marcamillion; 12.11.2011
comment
Вы используете рельсы? Если да, взгляните на truncate: apidock.com/rails/ActionView/Helpers/TextHelper /обрезать - person Alex Peattie; 12.11.2011