在您的情况下推荐使用:
投资组合模型
class Portofolio < ActiveRecord::Base
attr_accessible :sector_ids, ....
has_many :portofolio_sectors
has_many :sectors, through: :portofolio_sectors
end
通知
<%= f.collection_select :sector_ids, Sector.order(:name), :id, :name, {:prompt => "Please Select a Sector"}, {multiple:true} %>
portfolio_sectors 模型
class PortofolioSector < ActiveRecord::Base
belongs_to :portofolio
belongs_to :sector
end
部门模型
class Sector < ActiveRecord::Base
has_many :portofolio_sectors
has_many :portofolios, through: :portofolio_sectors
end
http://guides.rubyonrails.org/association_basics.html#choosing-between-has-many-through-and-has-and-belongs-to-many
这对您来说可能很有趣,必须有一个专业帐户:
http://railscasts.com/episodes/258-token-fields-revised
更新
当您添加sectors
到portofolio
using时multiple select
,sector_ids
将填充一个array
属于 的 id Sector
,并且在提交 rails 将读取param[:sector_ids]
如下内容:[2,5,17,8]
并将创建 4 个(在本例中为 4 个)portofolio_sectors
记录,其中sector_id = 2, 5, 17, 8
每个记录porofolio_id
将是当前portofolio.id
例如: 2. 结果,您将拥有:
投资组合表:
id portofolio_id sector_id
1 2 2
2 2 5
3 2 17
4 2 8
如何从sector_ids 创建portofolio_sectors 您还可以查看此链接:http : //railscasts.com/episodes/382-tagging,查看 tag_lis 方法。
鉴于您可以使用: 访问扇区portofolio.sectors
,这将是array
属于sectors
this的一个portofolio
。