Создание класса Ruby Review

Класс 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

Эти вопросы выглядят как какое-то задание в школе :). 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)

nuaky 21.12.2020 12:48

Это какой-то вопрос интервью или учебник, который вы хотите пройти? Пожалуйста, покажите, что вы уже написали/пробовали, и объясните, где вы застряли.

Stefan 21.12.2020 13:03

@nuaky я попробовал ваш третий пункт, но он выдал мне ошибку, что неопределенный метод `где'

Amit Agarwal 21.12.2020 13:53

@Stefan Где-то вы правы, потому что у меня есть проект, связанный с HTML и ruby, но я не знал ruby, этот язык для меня новый.

Amit Agarwal 21.12.2020 13:55
Почему в Python есть оператор &quot;pass&quot;?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
4
78
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
  1. self.recent

Это просит вас сделать заказ по submit_time и вернуть первые 5 результатов.

Чтобы выполнить заказ, см.: https://apidock.com/rails/ActiveRecord/QueryMethods/order

Чтобы выполнить ограничение, см.: https://apidock.com/rails/ActiveRecord/QueryMethods/limit

Если вы все еще застряли на этой проблеме, пожалуйста, покажите нам, что вы пробовали.

  1. <=>

Если вы нажмете ссылку в предоставленном вами комментарии (http://ruby-doc.org/core-2.4.2/Comparable.html), решение будет почти идентично этому примеру.

Если вы все еще застряли на этой проблеме, пожалуйста, покажите нам, что вы пробовали.

  1. set_submit_time

Стоит бегло просмотреть: https://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html — чтобы понять, что подразумевается под обратным вызовом. По сути, этот метод будет автоматически вызываться всякий раз, когда создается новая запись. (Вы, наверное, могли бы догадаться об этом, основываясь на довольно понятном названии: before_create!)

Опять же, первый пример на этой странице почти идентичен вашему сценарию. Вы можете использовать Time.now, чтобы узнать текущее время.

Если вы все еще застряли на этой проблеме, пожалуйста, покажите нам, что вы пробовали.

Другие вопросы по теме