#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 %>