【问题标题】:Scope with association .any?关联范围.any?
【发布时间】:2011-04-18 18:38:02
【问题描述】:

我有两个模型、员工和部门。员工通过职位属于部门。在一个选择标签中,我想只列出有员工的部门。

现在我有:

@current_company.departments.collect {|d| [d.title, d.id] if d.employees.any?}

这给我留下了几个 nil 选择选项。我想我可以为部门编写一个范围,就像@current_company.departments.with_employees:

scope :with_employees, :where => (self.employees.any?)

我意识到这行不通,但我坚持我应该做的事情。

【问题讨论】:

    标签: ruby-on-rails select tags scopes


    【解决方案1】:

    请记住,连接是内部连接,它完全符合您的要求 - 将连接编写为范围...

    scope :with_employees, :joins => :employees
    

    【讨论】:

    • +1 表示可重用性、出色的清晰度、可扩展性、简单性和效率。
    • 我忘了提到员工属于部门:通过=>:职位。还适用吗?
    • 希望您已经尝试过并发现是的,它也可以通过连接表工作。现在是时候接受我的回答了,喂我;)
    【解决方案2】:

    如果您不需要 nil 选择选项,为什么不能使用 .compact 方法?

    @current_company.departments.collect {|d| [d.title, d.id] if d.employees.any?}.compact
    

    【讨论】:

      【解决方案3】:

      或者另一种方法...

      @current_company.departments.reject {|d| d.employees.empty?}.collect {|d| [d.title, d.id]}
      

      Ruby 的美妙之处在于有很多方法可以做任何事情;)

      【讨论】:

        猜你喜欢
        • 2015-07-15
        • 2013-06-09
        • 1970-01-01
        • 1970-01-01
        • 2013-04-19
        • 2016-07-23
        • 2015-06-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多