2011-09-21 48 views
0

我的形式有:如何筛选出基于特定值的选项?

<%= f.select(:amount, Payment::AMOUNT_VALUES, {:blank => false}) %> 

我的模型有:

AMOUNT_VALUES = { '$ 0' => 0, '$ 1' => 1, '$ 2' => 2, '$ 5' => 5, '$ 10' => 10 }. 

如果用户选择$ 2和提交表格。下次他回到表单时,我只需要在选择框中显示超过$ 2的所有内容。因此,这些选项应该只有5美元和10美元。

这是如何实现的?

回答

0

我最近写了一些辅助代码,帮助我排除其中一家商店已经贴出营业时间为星期几。适应您的规格不应太难。

更新:增加了问题特定的代码并更新了更有效的拒绝块。

module HoursHelper 
    ... 
    def generateDayStrings (unavailable_days) 
    all_days = [ ['Sunday', 'Sun'], 
       ['Monday', 'Mon'], 
       ['Tuesday', 'Tue'], 
       ['Wednesday', 'Wed'], 
       ['Thursday', 'Thu'], 
       ['Friday', 'Fri'], 
       ['Saturday', 'Sat'] ] 
    all_days.reject do |day| 
     (day - unavailable_days).size != 2 
    end 
    end 
    ... 
end 

<%= f.select :day_of_week, generateDayStrings(@days_with_hours) %> 

# @days_with_hours = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri'] 
# generateDayStrings(@days_with_hours) = [ ['Sunday', 'Sun'], ['Saturday', 'Sat'] ] 

为您的特定的代码库,它很可能是这个样子

module PaymentsHelper 
    ... 
    def generatePaymentAmountSelectArray (unavailable_denoms) 
    all_denoms = [ ['$ 0', '0'], 
        ['$ 1', '1'], 
        ['$ 2', '2'], 
        ['$ 5', '5'], 
        ['$ 10', '10'] ] 

    # or all_denoms = Payment::AMOUNT_VALUES 
    # although not sure how this works with a hash. 

    all_denoms.reject do |current_denom| 
     (current_denom - unavailable_denoms).size != 2 
    end 
    end 
    ... 
end 

<%= f.select :amount, generatePaymentAmountSelectArray(@used_values), {:blank => false}) %> 

# just make sure you set @used_values in your controller 

我觉得有这样做的更好的办法,所以,如果我还记得,我会更新它。

+1

感谢您的输入。我设法找到了一个似乎可以在我的模型中工作的单线程,使用:'.delete_if {| k,v | v