我将如何路由此层次结构

时间:2012-07-10 19:30:06

标签: ruby-on-rails ruby activerecord

我正在创建一个应用程序,用于跟踪用户的工作情况以及他们在公司中的位置。我需要一些帮助尝试路由应用程序,我已经制作了usercompanydepartment的支架。

  • user
    • company(用户has_many:through =>就业)
      • department

user.rb

class User < ActiveRecord::Base
    #associations
    has_many :employments
    has_many :companies, :through => :employments
    has_one :department, :through => :employments
end

employment.rb

class Employment < ActiveRecord::Base

  belongs_to :user
  belongs_to :company
  belongs_to :department
  has_many   :employment_histories
end

employment_history.rb

class EmploymentHistory < ActiveRecord::Base

  belongs_to :employment
end

company.rb

class Company < ActiveRecord::Base

  has_many :employments
  has_many :users, :through => :employments
  has_many :departments
end

department.rb

class Department < ActiveRecord::Base
  belongs_to :company
end

1 个答案:

答案 0 :(得分:0)

对于路由,最简单的方法是将资源声明为资源,然后通过对象的id访问它们。 http://guides.rubyonrails.org/routing.html#resource-routing-the-rails-default

然后通过关联查找,我建议您查看此railscast:http://railscasts.com/episodes/3-find-through-association?view=asciicast

如果通过关联进行路由和查找并不容易,那么您可能希望重构您的层次结构以使其更具意义。例如,我的方法是:

  • 用户has_many:就业并在用户模型中给出default_scope命令:'employments.created_at DESC',以确保最近的就业是第一位的。
  • 就业has_one:department
  • Department belongs_to:company
  • 公司has_many:部门

然后,您可以通过关联访问所有这些数据(请参阅上面的链接)。您只需要路由资源,然后知道如何在正确的控制器中访问它们。