首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将父id传递到select选项的哈希中

将父id传递到select选项的哈希中
EN

Stack Overflow用户
提问于 2014-07-25 17:45:47
回答 1查看 98关注 0票数 0

我有一个方法,它从DELIVERYCOST数据库中获取两列,并将列'title'分组到grouping 'timing'下。它会将其转换为散列

代码语言:javascript
复制
  def self.titles_by_timing
    self.pluck(:id, :timing, :title).group_by(&:first).each { |_, v| v.map!(&:last) }
  end

DeliveryCost.titles_by_timing
=> {"Install"=>["Luton Day (7am - 7pm)", "LWB Day (7am - 7pm)", "Luton Overtime (7pm - 7am)", "LWB Overtime", "Helper Day (7am - 7pm)", "Helper Overtime"], "Breakdown"=>["Luton Day (7am - 7pm)", "LWB Overtime", "Luton Overtime (7pm - 7am)", "Helper Day (7am - 7pm)", "Helper Overtime"], "Fuel"=>["Congestion Charge", "Fuel in London Zone 1-2", "Fuel in London Zone 3-4", "Fuel By Milege (Out of M25)]}

这是表单中作业交付成本的部分

代码语言:javascript
复制
= f.select :delivery_cost_id, option_groups_from_collection_for_select(DeliveryCost.titles_by_timing, :timing, :title, :id) 

由于作业交付成本属于交付成本,且交付成本有多个作业交付成本,因此在创建作业交付成本实例时,需要传入id才能创建关联。然而,我在这样做时遇到了很大的困难。我如何做到这一点,我要扩展我当前的方法吗?

非常感谢您的帮助。

EN

回答 1

Stack Overflow用户

发布于 2014-07-25 18:33:25

看起来DeliveryCost.titles_by_timing已经在做所有的繁重工作了,所以你应该使用grouped_options_for_select而不是option_groups_from_collection_for_select

检查ActionView::Helpers::FormOptionsHelper#grouped_options_for_select

更新:

尝试在grouped_options_for_select中使用以下代码

代码语言:javascript
复制
def self.titles_by_timing
  self.all.each_with_object(Hash.new([])) do |delivery_cost, grouped|
    grouped[delivery_cost.title] |= [[delivery_cost.id, delivery_cost.timing]]
  end
end

请注意,由于将所有对象加载到内存中,此方法的性能可能会很差。如果这是一个问题,您可以尝试一些缓存、记忆或将昂贵的查询委托给数据库。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24952749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档