Rails - 显示关系数据但有条件

时间:2017-06-22 11:02:28

标签: ruby-on-rails

我有3个模特

  1. 工作(belongs_to :hiring_procedure
  2. 招聘程序(has_many :jobs, has_many :hiring_procedure_stages
  3. 招聘程序阶段(belongs_to :hiring_procedure
  4. 这意味着在我正在显示作业的视图中,我可以访问不同的招聘阶段,如下所示,这是正常的。

    job.hiring_procedure.hiring_procedure_stages
    

    我的问题是,上面的代码将返回所有阶段,如果我只想要模型deleted的{​​{1}}列为hiring_procedure_stage

    的阶段,该怎么办?

    我实际上在下拉菜单中显示不同的阶段供用户选择,我不希望用户看到已删除的阶段(删除意味着模型{{1}的删除值为f },它是一个布尔值)

    t

    有没有办法在视图中实现这一点,或者更好地将此逻辑放在另一个变量的控制器中并在视图中访问它?

2 个答案:

答案 0 :(得分:2)

hiring_procedure_stage.rb 模型中创建范围

scope :active, -> { where(deleted: false) }

现在您可以将上述范围用作:

job.hiring_procedure.hiring_procedure_stages.active

这只会让hiring_procedure_stages deleted is false

返回from multiscorer.multiscorer import MultiScorer

答案 1 :(得分:2)

另一种方法是定义与范围的关系,因此始终会考虑未删除的阶段。

为此,请将范围添加到关联:

class HiringProcedure < ApplicationRecord
  has_many :hiring_procedure_stages, -> { where(deleted: false) }
end

每次使用

hiring_procedure.hiring_procedure_stages

您将获得所有未删除的阶段。

当然,只有在您永远不会尝试删除已删除的阶段时,才推荐使用此解决方案。