2

我有一个选择列表,我想用一些硬编码值以及来自 AR 的一些值来填充。例如,我有一个列表供用户选择交易的支付选项。

  • 信用卡
  • 现金
  • 礼券

够简单...

<%= select_tag :paying_with, options_for_select([["Credit card", "credit_card"], ["Cash", "cash"], ["Gift Certificate", "gift_certificate"]] %>

现在我想删除通用的“信用卡”选项并包括用户存档的每张信用卡(例如PaymentMethod属于的每个模型User

  • 您的万事达卡以 1234 结尾
  • 您的 AmEx 以 4321 结尾
  • 现金
  • 礼券

我知道如何单独做这两个,但我似乎无法弄清楚如何混合它们。请注意,我使用的是 aselect_tag而不是 the,FormHelper.select因为这不一定对应于模型上的属性。

4

2 回答 2

1
@options = @user.credit_cards.map{ |c| ["Your #{c.card_name} ending in #{c.card_last_four_digits", c]}.insert(["Cash", "cash"]).insert(["Gift Certificate", "gift_certificate"])

这将为您提供一个传递给 options_for_select 的数组。我猜测一些变量名称,因为您没有发布相关代码。

于 2013-10-16T16:59:00.470 回答
0

我最终将 Nikita 的评论和优秀的旧时尚<<运营商结合起来。我最初想将查询保留在视图中,但那里变得太复杂了。

    @payment_options = []
    @payment_options << ["No charge", "no_charge"]
    @payment_options += PaymentMethod.where(...).map { |p| [p.name, p.id] }.to_a
    @payment_options << ["Cash", "cash"]
    @payment_options << ["Gift Certificate", "gift_certificate"]

...在视图中...

<%= select_tag :paying_with, options_for_select(@payment_options, enrollment.paying_with || "no_charge") %>
于 2013-10-17T18:17:48.960 回答