在我的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
如何做到这一点?
也许我的方法完全错误,将计划存储在数组中会更容易吗?
感谢您的帮助。
答案 0 :(得分:1)
数组或散列可以用于此目的。如果我理解正确,你的方法应该是这样的。
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
希望这有帮助!