Порядок контроллера Ruby on Rails со строками - PullRequest
0 голосов
/ 17 января 2019

Итак, я пытаюсь организовать одно из моих представлений так, чтобы статьи моего сайта были перечислены по названию заголовка. Например, некоторые из моих статей называются «статья pt.1, история pt.2, общество pt.1 и т. Д.». Я правильно их отсортировал, используя эту строку кода в контроллере статей

def index
    @articles = Article.order(:user_id)
end

Он работает с использованием идентификатора пользователя, но если бы я хотел добавить другую категорию и расположить их в алфавитном порядке, мне нужно было бы обновить идентификатор пользователя каждой статьи, что нецелесообразно, так как их число чуть больше 200 в база данных. То, что я хотел бы, это как-то взять часть заголовка статьи и отсортировать каждую, как я, с полем user_id. Таким образом, я могу отсортировать каждую из них, используя строковую часть, такую ​​как «article» из «article pt.1»

Спасибо за чтение и хорошего дня!

Ответы [ 3 ]

0 голосов
/ 17 января 2019

Прежде всего, не очень ясно, какой вывод вам нужен, но исходя из предположения и описания, упомянутых в посте, кажется, что вы хотите отсортировать строковое поле не по целому значению, а по подстроке .

Лучше использовать порядок для сортировки строк в алфавитном порядке.

@articles = Article.order(:title)

И это также будет служить цели, так как сначала будет соответствовать первому алфавиту каждой строки, а также одновременно обрабатывать нулевые значения.

Зачем писать собственную логику, если цель выполняется уже определенным методом.

0 голосов
/ 18 января 2019

Я смог сделать это, используя функцию сортировки вместо порядка, используя поле: title на контроллере статей.

def index
  @articles = Article.sort(:title)
end
0 голосов
/ 17 января 2019

Почему бы просто не отсортировать по названию? Предполагая, что в вашей таблице статей есть столбец с именем title:

для алфавитного порядка

def index
  @articles = Article.order(:title)
end

Для обратного алфавитного порядка

def index
  @articles = Article.order(title: :desc)
end

Если вы действительно хотите просто отсортировать по подстроке заголовка. Вам нужно будет добавить новый столбец в таблицу статей (в этом примере он называется slug):

rails g migration AddSlugToArticles slug:text

rails db:migrate

Тогда вам придется обновлять поле slug каждой записи

Article.all.each do |article|
  new_slug = #your code to generate substring here
  article.update(slug: my_string
end

затем заказывайте по слагу:

def index
  @articles = Article.order(:slug)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...