首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails -显示关系数据但有条件

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

Stack Overflow用户
提问于 2017-06-22 11:02:27
回答 2查看 26关注 0票数 0

我有三个模特

  1. 作业(belongs_to :hiring_procedure)
  2. 招聘程序(has_many :jobs, has_many :hiring_procedure_stages)
  3. 雇用程序阶段(belongs_to :hiring_procedure)

这意味着,在我显示职务的视图中,我可以访问不同的招聘阶段,如下所示,这些阶段运行良好。

代码语言:javascript
复制
job.hiring_procedure.hiring_procedure_stages

我的问题是,上面的代码将返回所有阶段,如果我只希望模型hiring_procedure_stagehiring_procedure_stage列是f的阶段

我实际上是在下拉菜单中显示不同的阶段,供用户选择,我不希望用户看到已删除的阶段(删除的意思是删除值为模型hiring_procedure_stagehiring_procedure_stage,它是布尔值)。

代码语言:javascript
复制
<%= select_tag 
  'application_stage',
   options_for_select(
   job.hiring_procedure.hiring_procedure_stages.map{ |p|[p.name, p.id] }, 
   hiring_procedure_stage_id
),%>

是否有一种方法可以在视图中实现这一目标,或者更好的方法是将此逻辑放入另一个变量中并访问该变量?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-22 11:06:03

hiring_procedure_stage.rb模型中创建作用域

代码语言:javascript
复制
scope :active, -> { where(deleted: false) }

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

代码语言:javascript
复制
job.hiring_procedure.hiring_procedure_stages.active

这只会返回hiring_procedure_stages,其中deleted is false

票数 2
EN

Stack Overflow用户

发布于 2017-06-22 11:37:35

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

为此,请向关联添加作用域:

代码语言:javascript
复制
class HiringProcedure < ApplicationRecord
  has_many :hiring_procedure_stages, -> { where(deleted: false) }
end

每次你用

代码语言:javascript
复制
hiring_procedure.hiring_procedure_stages

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44697504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档