Ruby on rails 我是否使用范围方法?

Ruby on rails 我是否使用范围方法?,ruby-on-rails,scope,Ruby On Rails,Scope,在我的电影模型中,我有以下代码 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.sh

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

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

这条路对吗?这是一个范围吗?它正在工作,但我有一个评论即将发布,我希望确保通过此功能。

我认为您正在尝试按创建时间的降序获取电影的所有评论。您可以遵循以下代码

# 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/movie.rb
类电影<应用程序记录
属于:用户
有很多:评论,依赖::销毁
有很多:用户,通过::评论
验证:标题、:描述、:电影长度、:导演、:分级、状态:true
结束
#app/models/review.rb
课堂复习<申请记录
属于:电影
属于:用户
作用域:created_desc,->{order(created_at::desc)}
结束
#app/controllers/movies_controller.rb
类MoviesController<应用程序控制器
在动作之前:查找电影,仅:[:show]#您还可以添加其他动作
def秀
@评论=@movie.reviews.created\u desc
结束
#你的其他Actions
私有的
DefFind_电影
@movie=movie.find(参数[:id])
结束
结束

在这里,我在
Review
模型中添加了一个范围,该范围将根据您的要求订购评论。现在在
show
操作中,我首先获取一部电影的评论,然后使用在
处创建的
按降序排列这些评论的作用域,这是否回答了您的问题?
# 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