【问题标题】:Form not saving multiple ids表单不保存多个ID
【发布时间】:2013-08-07 05:57:17
【问题描述】:

我有以下

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

当我提交表单时,它会保存所有其他属性,但没有传递或保存扇区 ID。

我希望能够为扇区参数保存多个 id

我可能缺少什么?

我需要在我的投资组合模型中使用 Accepts_nested_attributes_for :sectors 吗?

【问题讨论】:

  • {:multiple =&gt; true} 正在制造一个问题,我相信你可以保存一个 sector_id 不使用它。
  • 我想保存多个ID,有什么想法吗?
  • 更改您的数据模型?您只有一个部门 ID。
  • 这么多的关系?抱歉不太清楚你的意思
  • 但我猜sector_id 是您的外键,因此不建议将其保存到数组中,而是使用连接表portfolio_sectors 和列id:int, portfolio_id:int, sector_id:int。如果您仍想在列 ref 中保存一个数组 stackoverflow.com/questions/3100427/…

标签: ruby ruby-on-rails-3 forms


【解决方案1】:

根据您的情况推荐的用法:

投资组合模型

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 selectsectors 添加到portofolio 时,sector_ids 将填充属于Sectorarray,并且在提交rails 上将读取此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,这将是属于此portofoliosectors 中的array

【讨论】:

  • 再次感谢.. 所以当我创建一个新的投资组合时,它是 Portfolio_Sector 模型,它会使用扇区 ID 和投资组合 ID 进行更新
  • 当您创建投资组合时,portofolio_sector 保持不变。当您创建一个部门时,portofolio_sector 保持不变,并且只有当您将部门添加到投资组合时,才会在 portofolio_sectors 表中创建新行。我会更新答案。
  • 啊,对了,谢谢,你不能给我一些关于在视图中访问这些的指示吗?
  • 阅读我的更新,希望这会有所帮助。另外我强烈建议观看我在这里链接的截屏视频,修改后的视频非常有帮助。
  • 我一定会的,你帮了我很大的忙,我会再读一读
猜你喜欢
  • 2012-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多