Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何干燥此Ruby代码(Active Admin/rails 3.2)_Ruby On Rails_Ruby_Ruby On Rails 3_Activeadmin_Dry - Fatal编程技术网

Ruby on rails 如何干燥此Ruby代码(Active Admin/rails 3.2)

Ruby on rails 如何干燥此Ruby代码(Active Admin/rails 3.2),ruby-on-rails,ruby,ruby-on-rails-3,activeadmin,dry,Ruby On Rails,Ruby,Ruby On Rails 3,Activeadmin,Dry,我觉得我在这里重复了太多同样的内容,我希望这样做,但我不知道怎么做 我有一个奖品模型,其中一个属性是Prize\u type,它是一个select(您可以在名为Prize\u type的常量中选择4个值中的一个)。对于每种类型的奖品,我都有一个表格 例如,我想使用某种映射(.map?),以防有一天,如果我在数组奖品类型中添加第五个或第六个值,我希望我的面板自动添加它们,而无需复制/粘贴另一个表,如下所示: show do def custom_number_to_currency(u

我觉得我在这里重复了太多同样的内容,我希望这样做,但我不知道怎么做

我有一个奖品模型,其中一个属性是
Prize\u type
,它是一个select(您可以在名为
Prize\u type
的常量中选择4个值中的一个)。对于每种类型的奖品,我都有一个
表格

例如,我想使用某种映射(
.map
?),以防有一天,如果我在数组
奖品类型
中添加第五个或第六个值,我希望我的面板自动添加它们,而无需复制/粘贴另一个
,如下所示:

show do 

    def custom_number_to_currency(u)
      number_to_currency u,
        separator: ".",
        delimiter: ",",
        precision: 0,
        raise: true  
    end    



 panel "Details of Prizes" do

  table_for deal.prizes.where(:prize_type => PRIZE_TYPES[0]) do |t|
    h3 "The deal has #{deal.prizes.where(:prize_type => PRIZE_TYPES[0]).count} #{PRIZE_TYPES[0]}s
    initially set in the campaign for a total value of #{custom_number_to_currency (deal.prizes.where(:prize_type => PRIZE_TYPES[0]).sum(:prize_unit_certified_market_value)) }", class: 'title-within-table'
    if deal.prizes.where(:prize_type => PRIZE_TYPES[0]).count > 0 # if there is at least one record of 'jackpot prize'
      t.column("Prize")             { |prize| link_to( image_tag( prize.prize_image_url, class: 'main_img_in_admin_interface' ), admin_prize_path(prize), target: :blank ) }
      t.column("Name")              { |prize| link_to prize.prize_name, admin_prize_path(prize), target: :blank }
      t.column("Category")          { |prize| prize.prize_category }
      t.column("Initial quantity")  { |prize| prize.prize_initial_stock_quantity }
      t.column("Remaining quantity"){ |prize| if prize.prize_remaining_stock_quantity == 0
                                                status_tag('no prizes left (all won)', :class => 'green')
                                              else
                                                prize.prize_remaining_stock_quantity
                                              end } 

  end

  table_for deal.prizes.where(:prize_type => PRIZE_TYPES[1]) do |t|
    h3 "The deal has #{deal.prizes.where(:prize_type => PRIZE_TYPES[1]).count} #{PRIZE_TYPES[1]}s
    initially set in the campaign for a total value of #{custom_number_to_currency (deal.prizes.where(:prize_type => PRIZE_TYPES[1]).sum(:prize_unit_certified_market_value)) }", class: 'title-within-table'
    if deal.prizes.where(:prize_type => PRIZE_TYPES[1]).count > 0 # if there is at least one record of 'in-modal prize'
      t.column("Prize")             { |prize| link_to( image_tag( prize.prize_image_url, class: 'main_img_in_admin_interface' ), admin_prize_path(prize), target: :blank ) }
      t.column("Name")              { |prize| link_to prize.prize_name, admin_prize_path(prize), target: :blank }
      t.column("Category")          { |prize| prize.prize_category }
      t.column("Initial quantity")  { |prize| prize.prize_initial_stock_quantity }
      t.column("Remaining quantity"){ |prize| if prize.prize_remaining_stock_quantity == 0
                                                status_tag('no prizes left (all won)', :class => 'green')
                                              else
                                                prize.prize_remaining_stock_quantity
                                              end } 

  end

  table_for deal.prizes.where(:prize_type => PRIZE_TYPES[2]) do |t|
    h3 "The deal has #{deal.prizes.where(:prize_type => PRIZE_TYPES[2]).count} #{PRIZE_TYPES[2]}s
    initially set in the campaign for a total value of #{custom_number_to_currency (deal.prizes.where(:prize_type => PRIZE_TYPES[2]).sum(:prize_unit_certified_market_value)) }", class: 'title-within-table'
    if deal.prizes.where(:prize_type => PRIZE_TYPES[2]).count > 0 # if there is at least one record of 'Consolation prize'
      t.column("Prize")             { |prize| link_to( image_tag( prize.prize_image_url, class: 'main_img_in_admin_interface' ), admin_prize_path(prize), target: :blank ) }
      t.column("Name")              { |prize| link_to prize.prize_name, admin_prize_path(prize), target: :blank }
      t.column("Category")          { |prize| prize.prize_category }
      t.column("Initial quantity")  { |prize| prize.prize_initial_stock_quantity }
      t.column("Remaining quantity"){ |prize| if prize.prize_remaining_stock_quantity == 0
                                                status_tag('no prizes left (all won)', :class => 'green')
                                              else
                                                prize.prize_remaining_stock_quantity
                                              end } 

  end

  table_for deal.prizes.where(:prize_type => PRIZE_TYPES[3]) do |t|
    h3 "The deal has #{deal.prizes.where(:prize_type => PRIZE_TYPES[3]).count} #{PRIZE_TYPES[3]}s
    initially set in the campaign for a total value of #{custom_number_to_currency (deal.prizes.where(:prize_type => PRIZE_TYPES[3]).sum(:prize_unit_certified_market_value)) }", class: 'title-within-table'
    if deal.prizes.where(:prize_type => PRIZE_TYPES[3]).count > 0 # if there is at least one record of 'Activation prize'
      t.column("Prize")             { |prize| link_to( image_tag( prize.prize_image_url, class: 'main_img_in_admin_interface' ), admin_prize_path(prize), target: :blank ) }
      t.column("Name")              { |prize| link_to prize.prize_name, admin_prize_path(prize), target: :blank }
      t.column("Category")          { |prize| prize.prize_category }
      t.column("Initial quantity")  { |prize| prize.prize_initial_stock_quantity }
      t.column("Remaining quantity"){ |prize| if prize.prize_remaining_stock_quantity == 0
                                                status_tag('no prizes left (all won)', :class => 'green')
                                              else
                                                prize.prize_remaining_stock_quantity
                                              end } 

  end
你不能这样做吗

panel "Details of Prizes" do   
    PRIZE_TYPES.each do |prize_type|
      table_for deal.prizes.where(:prize_type => prize_type) do |t|
        h3 "The deal has #{deal.prizes.where(:prize_type => prize_type).count} #{prize_type}s
        initially set in the campaign for a total value of #{custom_number_to_currency (deal.prizes.where(:prize_type => prize_type).sum(:prize_unit_certified_market_value)) }", class: 'title-within-table'
        if deal.prizes.where(:prize_type => prize_type).count > 0 # if there is at least one record of 'jackpot prize'
          t.column("Prize")             { |prize| link_to( image_tag( prize.prize_image_url, class: 'main_img_in_admin_interface' ), admin_prize_path(prize), target: :blank ) }
          t.column("Name")              { |prize| link_to prize.prize_name, admin_prize_path(prize), target: :blank }
          t.column("Category")          { |prize| prize.prize_category }
          t.column("Initial quantity")  { |prize| prize.prize_initial_stock_quantity }
          t.column("Remaining quantity"){ |prize| if prize.prize_remaining_stock_quantity == 0
                                                    status_tag('no prizes left (all won)', :class => 'green')
                                                  else
                                                    prize.prize_remaining_stock_quantity
                                                  end }  
   end
end
你不能这样做吗

panel "Details of Prizes" do   
    PRIZE_TYPES.each do |prize_type|
      table_for deal.prizes.where(:prize_type => prize_type) do |t|
        h3 "The deal has #{deal.prizes.where(:prize_type => prize_type).count} #{prize_type}s
        initially set in the campaign for a total value of #{custom_number_to_currency (deal.prizes.where(:prize_type => prize_type).sum(:prize_unit_certified_market_value)) }", class: 'title-within-table'
        if deal.prizes.where(:prize_type => prize_type).count > 0 # if there is at least one record of 'jackpot prize'
          t.column("Prize")             { |prize| link_to( image_tag( prize.prize_image_url, class: 'main_img_in_admin_interface' ), admin_prize_path(prize), target: :blank ) }
          t.column("Name")              { |prize| link_to prize.prize_name, admin_prize_path(prize), target: :blank }
          t.column("Category")          { |prize| prize.prize_category }
          t.column("Initial quantity")  { |prize| prize.prize_initial_stock_quantity }
          t.column("Remaining quantity"){ |prize| if prize.prize_remaining_stock_quantity == 0
                                                    status_tag('no prizes left (all won)', :class => 'green')
                                                  else
                                                    prize.prize_remaining_stock_quantity
                                                  end }  
   end
end

工作得很好!谢谢你,工作得很好!谢谢,这个问题似乎离题了,因为它是关于代码重构的,属于上。这个问题似乎离题了,因为它是关于代码重构的,属于上