如何根据特定值筛选出选择的选项?

时间:2011-09-21 02:54:14

标签: ruby-on-rails-3

我的表格有:

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

我的模特有:

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

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

如何实现这一目标?

1 个答案:

答案 0 :(得分: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

我觉得有更好的方法可以做到这一点,所以如果我记得的话,我会更新。