【问题标题】:Am I using a scope method?我在使用范围方法吗?
【发布时间】:2021-02-26 11:19:06
【问题描述】:

在我的电影模型中,我有以下代码。

class Movie < ApplicationRecord
  belongs_to :user
  has_many :reviews, dependent: :destroy
  has_many :users, through: :reviews
  validates :title, :description, :movie_length, :director, :rating, presence: true
end
 

def self.show_order_desc
  self.review.order("created_at DESC")
end

我在我的电影控制器显示动作中调用它,在那里我有我对该电影的评论。

 def show
     @reviews = show_order_desc
 end

这是正确的方法吗?这是一个范围吗?它正在工作,但我有一个评论即将到来,我想确保通过此功能。

【问题讨论】:

标签: ruby-on-rails scope


【解决方案1】:

我认为您正在尝试按created_at 的降序获取电影的所有评论。您可以按照以下代码进行操作。

# app/models/movie.rb

class Movie < ApplicationRecord
  belongs_to :user

  has_many :reviews, dependent: :destroy
  has_many :users, through: :reviews

  validates :title, :description, :movie_length, :director, :rating, presence: true
end
# app/models/review.rb

class Review < ApplicationRecord
  belongs_to :movie
  belongs_to :user

  scope :created_desc, -> { order(created_at: :desc) }
end
# app/controllers/movies_controller.rb

class MoviesController < ApplicationController
  before_action :find_movie, only: [:show] # you can add other actions also

  def show
    @reviews = @movie.reviews.created_desc
  end

  # your other actoins

  private

  def find_movie
    @movie = Movie.find(params[:id])
  end
end

在这里,我在Review 模型中添加了一个范围,它将根据您的要求订购评论。现在在show 操作中,我首先获取电影的评论,然后使用针对这些评论的范围以降序排列created_at

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-29
    • 1970-01-01
    • 2012-09-06
    • 2019-06-25
    • 2020-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多