1

在我的 rails 应用程序中,我有一个过滤器,它根据传递给我的范围的参数显示所有作业,这些参数都可以正常工作,但作为对此的扩展,我有一个 ajax 调用,它限制了您可以根据项目选择的作业和您在过滤器中选择的客户端。以下是我的人际关系:

一个客户有很多项目
一个项目属于一个客户,有很多工作
一个工作属于一个项目

我可以列出基于客户的所有项目和基于项目的所有工作,但我遇到的问题是仅在指定客户时列出所有工作,因此,获取该客户的所有项目,然后获取所有这些项目的所有工作。

我猜我必须使用连接才能使其正常工作,但是已经尝试了几天没有运气:(

如果有人能指出一个好的资源的方向,我可以看看尝试解决这个问题,将不胜感激

4

1 回答 1

1

在此功能起作用之前,模型如下所示 -

    class Client < ActiveRecord::Base
      has_many :projects

    end

    class Project < ActiveRecord::Base
      belongs_to :client
      has_many :jobs

    end

    class Job < ActiveRecord::Base
      belongs_to :project

    end   

为了仅基于客户端获取作业,必须在客户端模型中设置 has_many through 关系。

    class Client < ActiveRecord::Base
      has_many :projects
      has-many :jobs, :through => :projects

    end

然后在您的控制器中,您可以使用这种新关系通过客户端 ID 获取所有作业 -

    @jobs = Client.find(params[:id]).jobs

它将返回它找到的客户的所有工作。再次感谢 sarnold 提供指向该解决方案的指南的链接

于 2012-04-30T08:01:36.333 回答