Rails模型协会

时间:2013-08-21 18:31:07

标签: ruby-on-rails associations

我正在尝试在用户和树列表之间创建关联。但对于这个应用程序,客户关心树木是否与他们的院子或邻居相关联。

所以例如 - 如果他们去他们的“院子里”创造一棵松树榆树 并在“邻居”松树和棕榈树。

我想要一个单一的松树元素,但我想调用类似的东西 - user.yard_trees和tree.neighborhood_trees -

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

你可以做这样的事情

class User < ActiveRecord::Base
  has_many :yard_trees, class_name: 'Tree', foreign_key: 'yard_id'
  has_many :neighborhood_trees, class_name: 'Tree', foreign_key: 'neighborhood_id'
end

class Tree < ActiveRecord::Base
  belongs_to :neighborhood, class_name: 'User'
  belongs_to :yard, class_name: 'User'
end

如果您的表格设置正确,这应该可以正常工作。但这对我来说似乎很奇怪。如果我是你,我实际上会创建Yard和Neighborhood Models并以这种方式设置它:

class User < ActiveRecord::Base
  has_one :yard
  has_one :neighborhood
end

class Tree < ActiveRecord::Base
  has_and_belongs_to_many :yards
  has_and_belongs_to_many :neighborhoods
end

class Neighborhood < ActiveRecord::Base
  has_and_belongs_to_many :trees
  belongs_to :user
end

class Yard < ActiveRecord::Base
  has_and_belongs_to_many :trees
  belongs_to :user
end

编辑:

has_and_belongs_to_many可能更合适。通过这种方式,您可以拥有一个松树对象,并将其与许多码和邻居相关联。