在 ActiveRecord::Relation 中,是在模型中按父级范围还是在控制器中设置 @parent 更可取

in ActiveRecord::Relation, is it preferable to scope by parent in the model or set @parent in the controller

我有一个 class 属于另一个。

course.rb

class Course < ActiveRecord::Base
belongs_to :school

我目前使用 before_action 在控制器中设置父实例。

courses_controller.rb

class CoursesController < ApplicationController

  #returns @school. only: [methods] avoids trying to set @school when no school param expected
  before_action :set_school, only: [:index]

  def index
    @courses = if @school.nil?
      Course.where(user_id: current_user.id)
    else
      Course.where(user_id: current_user.id, school_id: @school.id)
    end
  end

  private

    def set_school
      if params[:school_id]
        @school = School.find params[:school_id]
      end
    end

...但是我在模型中看到了 scope 方法,想知道在模型中简单地设置一个默认范围 :school 是否更合适,而在我极少数情况下设置 unscope/rescope想按用户而不是学校索引。

完全披露:我只注意到在使用 acts_as_list gem 的示例中有一个模型由父级限定,我不打算使用它,但似乎 Rails 会允许的。

这可能并且更合适吗?我开始支持瘦模型方法,但它只有一行与 6 行(在控制器中)。

不确定是否可行,但它会将您的大部分应用程序耦合到 default_scope 实现,恕我直言,这是一个非常糟糕的主意。您可能最终需要更改此实现,这将产生相当大的影响。它还会使您的单元测试更加复杂。

更多的代码行不一定是坏事,只要它能帮助您保持良好的关注点分离。