我的表格有:
<%= 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 :(得分: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
我觉得有更好的方法可以做到这一点,所以如果我记得的话,我会更新。