Извлечение и отображение данных активной записи

#ruby-on-rails

#ruby-on-rails

Вопрос:

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

Чтение через https://guides.rubyonrails.org/v2.3.11/active_record_querying.html Мне удалось заставить его отображать правильные детали, но лучший ли это способ сделать это? Возникают ли проблемы с производительностью при использовании этого метода?

 <% about = Page.find(1) %>
<h1 class="title"><%= about.title %></h1>
<% unless about.subtitle.blank? %>
    <h2 class="subtitle"><%= about.subtitle %></h2>
<% end %>
<p><%= about.body %></p>
  

И по аналогичной теме, каков наилучший способ итерации и отображения данных? Это то, чего я хотел бы достичь:

 <div class="tabs">
    <ul>
        <% Chapter.all.each do |c| %>
            <li><a><%= chapter.title %></a></li>
        <% end %>
    </ul>
</div>
  

Любые советы приветствуются!

Комментарии:

1. Вы читаете руководства по действительно старой версии Rails — я не думаю, что вы используете эту версию. Убедитесь, что вы читаете правильные руководства.

Ответ №1:

Для достижения этой

 <div class="tabs">
    <ul>
        <% Chapter.all.each do |c| %>
            <li><a><%= c.title %></a></li>
        <% end %>
    </ul>
</div>
  

Есть несколько вещей, которые должны присутствовать:

Первый шаг

У вас должна быть модель или набор данных, которые представляют ваши данные, например, у вас может быть файл Person.rb с именем и цветом волос в качестве свойств. Это может быть ваша модель, все, что она делает, это определяет набор данных.

 class Person < ApplicationRecord
    scope :latest_Person, -> { order(date: :desc) }

    validates :name, presence: true, length: { minimum: 5 }
    validates :haircolor, presence: true
end
  

Второй шаг

Вам нужно объявить или создать экземпляр этой модели в вашем классе контроллера, например, вам может потребоваться отобразить список пользователей в определенном порядке. С этим можно справиться с помощью scopes . Пример

 def persons
   # Render all persons
   @persons_all = Person.latest_Person
end
  

Третий шаг

Вызов объявленного объекта из класса контроллера в представлении. По сути, все, что вы делаете, это ссылаетесь на объявленный объект. Пример

 <% if @persons_all.empty? %>
  <h2>No persons available</h2>
<% else %>
   <% @persons_all.each do |p| %>
      <p><%= p.name %></p>
      <p><%= p.haircolor %></p>
   <% end %>
<% end %>
  

Отметьте в качестве ответа, помогло ли это, спасибо.

Комментарии:

1. Спасибо! Это несколько ошеломило меня, но я ценю подробный ответ. Это мой файл chapter.rb class Chapter < ApplicationRecord has_many :chapter_members has_many :users, through: :chapter_members end И в chapters_controller.rb есть только это (у меня есть edit etc в пространстве имен администратора.) def index @chapters = Chapter.all end Является ли область видимости, о которой вы упомянули в дополнение к этому?

2. Определение области видимости может обрабатываться в классе и вызываться в контроллере. Также, пожалуйста, обратите внимание, что я использовал только scopes , потому что хотел получить список пользователей, которые были созданы первыми и т.д., И упорядочить их на основе этого.

3. Поздний ответ, но у меня наконец-то появилось время попробовать реализовать ваш код выше, но я просто получаю undefined method empty?’ для nil: NilClass`

4. Вы создали класс, который будет вызываться в вашем контроллере?

5. Да, у меня есть def chapters @all_chapters = Chapter.chapter_list end и <% if @all_chapters.empty? %> <h2>No chapters available</h2> <% else %> <% @all_chapters.each do |c| %> <p><%= c.name %></p> <% end %> <% end %>