Вопрос по ruby, ruby-on-rails – Цикл внутри цикла в контроллере Rails

0

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

РЕДАКТИРОВАТЬ:

  def index
    @institution = Institution.find(current_user.institution.id)
    @categories = Category.all
    @categories.each do |category|
      @posts = Post.where("category_id = ? and institution_id = ?", category, @institution).order("created_at DESC")
    end
    authorize! :read, @post
    respond_with(@posts)
  end

Может кто-нибудь указать мне правильное направление?

РЕДАКТИРОВАТЬ 2: Мой взгляд (index.html.haml)

%h1 Listing posts

%table
  %tr
    %th Title
    %th Description
    %th User
    %th Category
    %th Type
    %th Class
    %th Institution

  - @posts.each do |post|
    %tr
      %td= post.title
      %td= post.description
      %td= post.user_id
      %td= post.category_id
      %td= post.institution_id
Я забыл упомянуть, что я хочу получать сообщения с установленным значением category_id! Сожалею. Daniel Garzon
Если я не ошибаюсь, вы просто хотите сгруппировать свои сообщения по категориям, см.Rails Guides topek
почему вы просто не запрашиваете все сообщения черезPost.all или вам нужны только сообщения с установленным значением category_id? cpjolicoeur

Ваш Ответ

1   ответ
5

Попробуй это:

def index
    @institution = Institution.find(current_user.institution.id)
    @categories = Category.all
    @posts = []
    @categories.each do |category|
      tposts = Post.where("category_id = ? and institution_id = ?", category, @institution).order("created_at DESC")
      @posts += tposts if tposts
    end
    authorize! :read, @post
    respond_with(@posts)
end

Чтобы получить все сообщения с ненулевым category_id, попробуйте это:

def index
    @institution = Institution.find(current_user.institution.id)
    @categories = Category.all
    @posts = Post.where("category_id is not null and institution_id = ?", @institution).order("created_at DESC")
    authorize! :read, @post
    respond_with(@posts)
end

+ Изменитьis not null в> 0 для целого числа category_id или!= '' если ваша таблица содержит & quot; & ap; вместо нулей.

Удачи.

@DanieGarzon Я редактировал в соответствии с вашим измененным кодом.
Похоже, не работает в моем случае. Я просто хочу зациклить каждую категорию и использовать мой поиск, как я его проверил, и он работает. Daniel Garzon
@DanieGarzon Еще раз попробуй.
Спасибо за быстрый ответ, Анил! Вы правы, я проверил свою консоль и переписывал @posts, но я последовал вашему совету и & apos; & lt; & lt; & apos; выдает ошибку: "неопределенный метод" & lt; & lt; " для nil: NilClass & quot ;. Вы уверены, что это правильные скобки? Daniel Garzon
Потрясающие! Я все ближе. В консоли я получаю желаемые результаты для @posts, но поскольку они теперь сгруппированы в разные массивы, в зависимости от категории, я получаю ошибки с моей точки зрения: & quot; неопределенный метод `title & apos; & quot; хотя у каждого поста есть свой заголовок. Можете ли вы проверить мой оригинальный пост? Я сделал правку, чтобы показать мой взгляд. Daniel Garzon

Похожие вопросы