0

我是 Rails 的新手,对我需要使用哪种关系有一些疑问。情况就是这样。

我有两个模型 Offer 和 User,一个用户可以属于许多优惠,而优惠可以有很多用户。用户也创建报价。

我想我必须使用 has_many :through rationship。例如,我创建了另一个模型“申请人”。申请人属于_to 用户和belongs_to 报价。但是用户和报价模型的关系如何?例如:

用户模型

 has_many :offer, :through => :applicant

报价模式

 has_many :user, :through => :applicant

我的怀疑是因为我已经有了这两种关系

用户模型

has_many :offers, :dependent => :destroy

报价模式

belongs_to :user

解决这个问题后,我必须从 applicanst_controller 保存申请模型中的记录,对吗?

提前致谢

4

1 回答 1

3

您所描述的是使用连接表的多对多关系。您实际上非常接近,但您只需has_many :offers, :dependent => :destroy要从您的用户模型和blongs_to :user您的报价模型中删除。它应该看起来像这样:

class User < ActiveRecord::Base
  has_many :offers, :through => :applicants
end

class Applicant < ActiveRecord::Base
  belongs_to :users
  belongs_to :offers
end


class Offer < ActiveRecord::Base
  has_many :users, :through => :applicants
end

您不必担心相关的销毁部分,因为关联会随着相应对象的删除而自动删除。对于多对多关联,如何建立关系并不重要。以下任一方法都可以:

@user.offers << @offer

@offers.users << @user

如果您不需要存储任何特定于您的申请人连接表的信息(例如,时间戳、描述),您可能希望查看has_and_belongs_to_many关系。查看has_many_through 和 has_and_belongs_to_many 之间的选择以供参考。

编辑

下面是 HABTM 关系的代码:

class User < ActiveRecord::Base
  has_and_belongs_to_many :offers
end


class Offer < ActiveRecord::Base
  has_and_belongs_to_many :users
end
于 2012-12-15T00:19:19.223 回答