#database #ruby-on-rails-3 #scaffolding
#База данных #ruby-on-rails-3 #строительные леса
Вопрос:
Я уже провел свое исследование, но, думаю, я не знаю, как спросить, поэтому я попытаюсь объяснить… Я ищу способ запросить первую запись, сохраненную на каркасе… Например, если у меня есть в таблице Продукты:
- Слаще
- Брюки
- Шарф
- Теннис
и я пишу @first_prod = Products.first
(или что-то в этом роде) на своей модели или, на мой взгляд <%= Products.each.first %>
(или что-то в этом роде), Rails дает мне первый результат в этом случае — Слаще…
Заранее спасибо…
Ответ №1:
В rails вы можете определить несколько способов по умолчанию для получения содержимого из модели.
В вашем случае я бы создал область видимости.
в вашей модели введите следующее:
scope ordered, :order => "Product.created_at ASC"
Когда вы вызываете
Product.ordered
Он вернет все ваши продукты, заказанные, когда они были созданы.
Если вам нужен самый первый продукт, вы просто
Product.ordered.first
В случае, если вы просто хотите получить элемент в одном определенном месте, вы можете сделать следующее (вместо того, что я упоминал выше)
Product.find(:first, :order => ‘created_at ASC’)
Если мое объяснение непонятно, просто дайте мне знать, и я постараюсь перефразировать
Ответ №2:
Хорошо. Предположим, что при вызове Product.all
этого он возвращает продукты в порядке, указанном вами выше. Итак, чтобы стать слаще, вы могли бы позвонить Product.all.first
. Или, если в вашем контроллере вы сделали @products = Product.all
, и вы хотите, чтобы это было в вашем представлении, вы можете использовать @products.first
. Или, если вы просматриваете их и хотите сделать что-то особенное с первым, вы могли бы сделать это:
<% @products.each_with_index do |product, i| %>
<% if id == 0 %>
do something special as this is the first product
<% end %>
<% end %>
Ответ №3:
Я думаю, вы ответили на свой собственный вопрос…
Если вы знаете, что хотите получить доступ к первому сохраненному элементу определенной модели, тогда вы просто позвоните Product.first
. Итак, в действии контроллера для представления, в котором вы хотите получить доступ к этим данным, просто введите @product = Product.first
… например
def index
@products = Product.all
@product = Product.first
end
Таким образом, вы можете получить доступ к первому сохраненному продукту, а также получить доступ ко всей коллекции в коде индексного представления.
Комментарии:
1. метод .first не обязательно выдает первый введенный элемент. он выдает первый элемент, используя сортировку баз данных по умолчанию. В моем ответе я создаю запросы, которые используют предложение order_by .
2. Интересно, я просто предположил, что сортировка всех баз данных по умолчанию будет основываться на неизвестном идентификаторе записи. Если это не так, я бы рекомендовал использовать область, которая упорядочивает на основе атрибута created_at.
3. ну, насколько я знаю, mysql по умолчанию сортирует сортировку по времени ввода InnoDB по первичному ключу (который не обязательно должен быть идентификатором) во многих случаях. сначала дайте вам то, что вы ожидаете, но рекомендуется не рассчитывать на это
![]()