【问题标题】:passing parent id into hash for options for select将父 id 传递到 hash 以获取 select 选项
【发布时间】:2014-09-17 03:10:28
【问题描述】:

我有一个方法,它从 DELIVERYCOST 数据库中获取两列,并将列 'title' 分组到分组 'timing' 下。它把它变成一个哈希

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

这是工作交付成本表格中的部分

= f.select :delivery_cost_id, option_groups_from_collection_for_select(DeliveryCost.titles_by_timing, :timing, :title, :id) 

因为JOB DELIVERY COSTS属于Delivery Costs,而Delivery cost有很多Job交付成本,所以我在创建job交付成本实例时需要传递id来创建关联。但是,我在这样做时遇到了很大的困难。我该怎么做,我是否扩展了我当前的方法?

非常感谢您的帮助。

【问题讨论】:

    标签: ruby-on-rails ruby forms hash


    【解决方案1】:

    看来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 一起使用:

    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
    

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

    【讨论】:

    • 是的,但我不能通过 id?!
    • 你是对的,我的错。我已经用可能的解决方案更新了答案。让我知道这有帮助。
    猜你喜欢
    • 1970-01-01
    • 2013-03-08
    • 2020-05-02
    • 2020-01-12
    • 1970-01-01
    • 1970-01-01
    • 2015-01-11
    • 1970-01-01
    • 2016-09-29
    相关资源
    最近更新 更多