Класс Review, который вы видите ниже, представляет обзор, который пользователь отправил для продукта. Где-то еще в коде Review.recent вызывается с product_id, который представляет собой просто уникальный номер, представляющий один продукт. Введите код, чтобы он работал как положено!
Review.recent — эта функция должна возвращать 5 самых последних отзывов (отсортированных по времени отправки) с указанным product_id.
<=> — эта специальная функция Ruby вызывается при сравнении двух объектов для сортировки. Он возвращает 1, 0 или +1 в зависимости от того, меньше ли объект, равен ли он или больше другого объекта. Вы захотите отсортировать элементы по submit_time, чтобы последние элементы отображались первыми.
Set_submit_time — эта функция вызывается непосредственно перед созданием отзыва. Мы можем использовать класс Ruby Time, чтобы установить для submit_time значение now, чтобы мы знали, когда обзор был создан.
Я новичок в рубине, и мне нужен этот код для моей очень важной работы, поэтому, как я могу его завершить, помогите мне, пожалуйста!
class Review < ApplicationRecord
# Every Review has a product_id and submit time
attr_accessor :product_id
attr_accessor :submit_time
# Before the new record is created, we'll call the :set_submit_time method
before_create :set_submit_time
def self.recent(product_id)
# Return only the 5 newest results for this product
# Reference: https://ruby-doc.org/core-2.4.2/Enumerable.html
Review.all
end
def <=>(other_review)
# Implement the comparison function for sorting
# Reference: http://ruby-doc.org/core-2.4.2/Comparable.html
end
private
def set_submit_time
# Set the submit_time
# Reference: https://ruby-doc.org/core-2.2.4/Time.html
end
end
Это какой-то вопрос интервью или учебник, который вы хотите пройти? Пожалуйста, покажите, что вы уже написали/пробовали, и объясните, где вы застряли.
@nuaky я попробовал ваш третий пункт, но он выдал мне ошибку, что неопределенный метод `где'
@Stefan Где-то вы правы, потому что у меня есть проект, связанный с HTML и ruby, но я не знал ruby, этот язык для меня новый.
self.recent
Это просит вас сделать заказ по submit_time и вернуть первые 5 результатов.
Чтобы выполнить заказ, см.: https://apidock.com/rails/ActiveRecord/QueryMethods/order
Чтобы выполнить ограничение, см.: https://apidock.com/rails/ActiveRecord/QueryMethods/limit
Если вы все еще застряли на этой проблеме, пожалуйста, покажите нам, что вы пробовали.
<=>
Если вы нажмете ссылку в предоставленном вами комментарии (http://ruby-doc.org/core-2.4.2/Comparable.html), решение будет почти идентично этому примеру.
Если вы все еще застряли на этой проблеме, пожалуйста, покажите нам, что вы пробовали.
set_submit_time
Стоит бегло просмотреть: https://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html — чтобы понять, что подразумевается под обратным вызовом. По сути, этот метод будет автоматически вызываться всякий раз, когда создается новая запись. (Вы, наверное, могли бы догадаться об этом, основываясь на довольно понятном названии: before_create!)
Опять же, первый пример на этой странице почти идентичен вашему сценарию. Вы можете использовать Time.now, чтобы узнать текущее время.
Если вы все еще застряли на этой проблеме, пожалуйста, покажите нам, что вы пробовали.
Эти вопросы выглядят как какое-то задание в школе :). 1. прочитать о guides.rubyonrails.org/active_record_callbacks.html , 2. self.submit_time <=> other_review.submit_time 3. Review.where(product_id: product_id).order("submit_time desc").limit(5)