我在使用范围方法吗?
Am I using a scope method?
在我的电影模型中,我有以下代码。
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
这是正确的方法吗?这是范围吗?它正在运行,但我有一个评论即将到来,我想确保通过此功能。
我认为您正在尝试按 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
.
降序排列
在我的电影模型中,我有以下代码。
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
这是正确的方法吗?这是范围吗?它正在运行,但我有一个评论即将到来,我想确保通过此功能。
我认为您正在尝试按 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
.