2013-08-06 41 views
0

我有以下形式不保存多個ID

class Portfolio < ActiveRecord::Base 
belongs_to :sector 

attr_accessible :overview, :title, :sector_id 

end 

class Sector < ActiveRecord::Base 
has_many :portfolios 
attr_accessible :name 
end 

我有我的表格內的collection_select創建一個新的投資組合爲

<%= f.collection_select(:sector_id, Sector.all, :id, :name, {:prompt => "Please Select a Sector"}, {:multiple => true}) %> 

當我提交表單它保存所有其他屬性,但沒有sector_id被傳遞或保存。

我希望能夠保存多個ID爲界PARAM

什麼可能我會丟失?

我需要在我的投資組合模型中使用accep_nested_attributes_for:個行業嗎?

+0

'{:multiple => true}'正在創建一個問題,我相信您可以使用它保存一個'sector_id' w/o。 – Salil

+0

我想保存多個ID,但有什麼想法? – Richlewis

+0

更改您的數據模型?您只有一個部門ID。 –

回答

1
你的情況

推薦用法:

portofolio模式

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} %> 

portofolio_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

更新

當你使用multiple select添加sectorsportofoliosector_ids將與屬於Sector ID的array填充,並在提交軌將讀取該param[:sector_ids],這將是這樣的:[2,5,17,8]將創造4(在此案例4)portofolio_sectors記錄與sector_id = 2, 5, 17, 8,併爲每個porofolio_id的將是前當前portofolio.id:2.在結果你必須:

portofolio_sectors表:

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,這將是arraysectors屬於此portofolio

+0

再次感謝..所以,當我創建一個新的投資組合,它是當您創建一個portofolio,保持完好無損,使用sector_id和portfolio_id – Richlewis

+0

更新Portfolio_Sector模型。當你創建一個扇區時,portofolio_sector保持不動,只有當你添加扇區到portofolio時,portofolio_sectors表中的新行纔會被創建。我會更新答案。 – rmagnum2002

+0

啊正確的感謝,不要以爲你可以給我一些關於訪問這些在視圖中的指針可以嗎? – Richlewis