Ruby on rails Rails-显示关系数据,但带有条件

Ruby on rails Rails-显示关系数据,但带有条件,ruby-on-rails,Ruby On Rails,我有三种型号 工作(属于:招聘程序) 招聘程序(有很多:工作,有很多:招聘程序阶段) 招聘流程阶段(属于:招聘流程) 这意味着在显示工作的视图中,我可以访问不同的招聘阶段,如下所示,这些阶段工作正常 job.hiring_procedure.hiring_procedure_stages 我的问题是,上面的代码将返回所有阶段,如果我只想要modelHipping\u procedure\u stage的deleted列为f 实际上,我在下拉菜单中显示了不同的阶段供用户选择,我不希望用户看到删除

我有三种型号

  • 工作(
    属于:招聘程序
  • 招聘程序(
    有很多:工作,有很多:招聘程序阶段
  • 招聘流程阶段(
    属于:招聘流程
  • 这意味着在显示工作的视图中,我可以访问不同的招聘阶段,如下所示,这些阶段工作正常

    job.hiring_procedure.hiring_procedure_stages
    
    我的问题是,上面的代码将返回所有阶段,如果我只想要model
    Hipping\u procedure\u stage
    deleted
    列为
    f

    实际上,我在下拉菜单中显示了不同的阶段供用户选择,我不希望用户看到删除的阶段(删除意味着删除的值为
    t
    ,对于型号
    租用程序\u阶段
    ,它是一个布尔值)

    
    

    是否有一种方法可以在视图中实现这一点,或者更好地将此逻辑放在另一个变量的控制器中,并访问视图中的逻辑?

    招聘程序\u stage.rb模型中创建一个范围

    scope :active, -> { where(deleted: false) }
    
    现在,您可以将上述范围用作:

    job.hiring_procedure.hiring_procedure_stages.active
    

    这将只返回您的
    招聘过程阶段
    ,其中
    删除为false
    招聘过程阶段.rb模型中创建范围

    scope :active, -> { where(deleted: false) }
    
    现在,您可以将上述范围用作:

    job.hiring_procedure.hiring_procedure_stages.active
    

    <>这只会使您返回<代码> HIGIGIONPROCEDURE OFFECTION<代码>其中<代码>删除为false

    > P>另一种方式是定义与该范围的关系,因此它将<强>永远>强>考虑未被删除的阶段。 为此,请将范围添加到关联中:

    class HiringProcedure < ApplicationRecord
      has_many :hiring_procedure_stages, -> { where(deleted: false) }
    end
    
    您将获得所有未删除的阶段


    当然,如果你永远不会尝试删除被删除的阶段,那么这个解决方案是被推荐的。

    < P>另一种方法是定义与那个范围的关系,所以它将<强>永远>强>考虑未被删除的阶段。 为此,请将范围添加到关联中:

    class HiringProcedure < ApplicationRecord
      has_many :hiring_procedure_stages, -> { where(deleted: false) }
    end
    
    您将获得所有未删除的阶段


    当然,只有当您永远不会尝试删除阶段时,才建议使用此解决方案。

    谢谢,这也是一个简洁的解决方案。谢谢,这也是一个简洁的解决方案。