【发布时间】:2011-02-11 10:27:26
【问题描述】:
以下是模型和关联。
class Vendor < ActiveRecord::Base
attr_accessible :name, :address_attributes
has_many :campaigns
has_many :clients, :through => :campaigns
end
class Client < ActiveRecord::Base
attr_accessible :name
has_many :campaigns
has_many :vendors, :through => :campaigns
end
class Campaign < ActiveRecord::Base
attr_accessible :name, :vendor_id, :client_id, :start_date, :end_date
belongs_to :client
belongs_to :vendor
end
这是新的广告系列创建表单 - form_for @campaign 做 |f| = f.error_messages %p = f.label:名称 %br = f.text_field:名称 %p = f.label :client_id, "客户" %br = f.collection_select(:client_id, Client.all, :id, :name, {:prompt => "请选择客户端"}, {:class=> "client_list"})
现在,关联方法@vendor.clients 将仅通过campaign 连接模型列出客户端。
如果活动表是空白的,则我无法使用@vendor.clients 获得任何clients
但正如您在新广告系列表单中的collection_select 中看到的那样,我必须能够选择属于供应商的客户。所以,我不得不拨打Client.all 电话。
尽管它会呈现集合选择,但所有这些客户都会被列出,尽管它们不属于该供应商。
所以,为了获取/创建/关联客户和供应商,并获得@vendor.clients 虽然没有创建campaign,我必须在供应商和客户之间添加另一个多对多关联,对吗?
如果我创建了 habtm 关联,它会相互冲突,对吧?
class Vendor < ActiveRecord::Base
attr_accessible :name, :address_attributes
has_many :campaigns
has_many :clients, :through => :campaigns
has_and_belongs_to_many :clients
end
class Client < ActiveRecord::Base
attr_accessible :name
has_many :campaigns
has_many :vendors, :through => :campaigns
has_and_belongs_to_many :vendors
end
我将如何解决这个问题?因为现在,如果我这样做,@vendor.clients 或 @client.vendors,会调用哪个关联?
带有has_and_belongs_to_many或has_many: .., :through => ..的那个
【问题讨论】:
-
顺便说一句,Milisami,你应该提高你的回复率;)当有人回答你的问题时,你几乎不会评论/投票/说什么。
标签: ruby-on-rails activerecord associations