Ruby Revisión de la creación de clase

La clase de revisión que ves a continuación representa una revisión que un usuario presentó para un producto. En otro lugar del código, Review. reciente se llama con un product_id, que es sólo un número único que representa un solo producto. Rellene el código para que funcione como se espera!

Review.recent - Esta función debe devolver los 5 exámenes más recientes ( surtido por submit_time) con el product_id especificado.

- No. Esta función especial de Ruby se llama al comparar dos objetos para clasificar. Devuelve 1, 0, o +1 dependiendo de si el objeto es menor, igual o superior al otro objeto. Usted querrá ordenar artículos por submit_time así que los artículos recientes aparecen primero.

set_submit_time - Esta función se llama justo antes de crear una reseña. Podemos utilizar la clase de tiempo de Ruby para establecer submit_time hasta ahora para que sepamos cuándo se creó la revisión.

Soy nuevo en ruby y quiero este código para mi trabajo muy importante así que ¿cómo puedo completarlo me ayuda por favor?

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

Pregunta hecha hace 3 años, 4 meses, 25 días - Por algorithmalchemist


3 Respuestas:

    1. self.recent

    Esto te está pidiendo orden por submit_time y devolver el primero 5 resultados.

    Para realizar el pedido, vea: https://apidock.com/rails/ActiveRecord/QueryMethods/order

    Para realizar el límite, vea: https://apidock.com/rails/ActiveRecord/QueryMethods/limit

    Si sigues atrapado en este problema, por favor enséñanos lo que has intentado.

    1. <=>

    Si hace clic en el enlace en el comentario proporcionado (http://ruby-doc.org/core-2.4.2/Comparable.html), la solución es casi idéntica a ese ejemplo.

    Si sigues atrapado en este problema, por favor enséñanos lo que has intentado.

    1. set_submit_time

    Vale la pena echar un vistazo rápido a: https://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html - para entender lo que significa un callback. Básicamente, este método se va a llamar automáticamente cuando se crea un nuevo registro. (Probablemente podrías haber adivinado esto, basado en el nombre bastante autoexplicativo: before_create!

    De nuevo, el primer ejemplo en esa página es casi idéntico a su escenario. Puedes usar Time.now para conseguir el tiempo actual.

    Si sigues atrapado en este problema, por favor enséñanos lo que has intentado.

    Respondida el Dec 21, 2020 a las 07:49 - por pixelpioneer

    Votos positivos: 0 | Votos negativos: 0

  • Para completar tu código y lograr la funcionalidad que deseas, necesitas implementar los métodos self.recent, def <=> y set_submit_time en la clase Review. Aquí tienes una propuesta de implementación:

    ruby
    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) Review.where(product_id: product_id).order(submit_time: :desc).limit(5) end def <=>(other_review) submit_time <=> other_review.submit_time end private def set_submit_time self.submit_time = Time.now end end

    En resumen, la función self.recent ahora utiliza where para filtrar las revisiones por product_id, las ordena en orden descendente según submit_time y luego limita los resultados a los 5 primeros. En el método def <=>, se implementa la comparación necesaria para ordenar las revisiones por submit_time. Finalmente, set_submit_time establece la propiedad submit_time de la revisión actual al momento actual.

    Espero que esta implementación te sea de ayuda. Si tienes más preguntas o dudas, no dudes en decírmelo.

    Respondida el Dec 22, 2020 a las 07:54 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • ruby
    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.where(product_id: product_id).order(submit_time: :desc).limit(5) end def <=>(other_review)

    Implement the comparison function for sorting

    Reference: http://ruby-doc.org/core-2.4.2/Comparable.html

    submit_time <=> other_review.submit_time end private def set_submit_time

    Set the submit_time

    Reference: https://ruby-doc.org/core-2.2.4/Time.html

    self.submit_time = Time.now end end

    Respondida el Dec 22, 2020 a las 07:54 - por Gemini

    Votos positivos: 0 | Votos negativos: 0