簡體   English   中英

如何在Ruby on Rails中過濾嵌套哈希?

[英]How to filter nested hash in Ruby on Rails?

在我的Rails 4應用程序中,我有一個(非ActiveRecord)模型,其中包含用戶可以訂閱的plans

class Plan

  PLANS = {
    'free'            => { :name => "Free",     :amount => 0,     :interval => '',   :maximum => FREE_MAXIMUM },
    'basic_monthly'   => { :name => "Basic",    :amount => 500,   :interval => 'month', :maximum => BASIC_MAXIMUM },
    'basic_yearly'    => { :name => "Basic",    :amount => 5000,  :interval => 'year',  :maximum => BASIC_MAXIMUM },
    'premium_monthy'  => { :name => "Premium",  :amount => 1000,  :interval => 'month', :maximum => PREMIUM_MAXIMUM },
    'premium_yearly'  => { :name => "Premium",  :amount => 10000, :interval => 'year',  :maximum => PREMIUM_MAXIMUM }
  }

  def self.all
    ...
  end

  def self.all_payable
    ...
  end

  def self.by_interval(interval)
    ...
  end

end

我已經與ActiveRecord進行了大量合作,但是在這種情況下,我不知道如何過濾哈希值,因此無法將其呈現到前端。

class PagesController < ApplicationController

  def pricing
    @plans = Plan.all
  end

end

如何才能做到這一點?

也許我的方法是完全錯誤的,並且將計划存儲在數組中更容易?

謝謝你的幫助。

數組或哈希將對此起作用。 如果我正確理解您的方法,則您的方法應類似於以下內容。

def self.all
  # returns the entire PLANS hash
  PLANS
end

def self.all_payable
  # only return hash elements that are not free
  PLANS.find_all { |k,v| v[:name] != 'Free' }
end

def self.by_interval(interval)
  # return all elements where the :interval matches interval
  PLANS.find_all { |k,v| v[:interval] == interval }
end

希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM