【问题标题】:Combining hard coded values with values from models in select list将硬编码值与选择列表中的模型值组合
【发布时间】:2013-10-16 16:45:11
【问题描述】:

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

  • 信用卡
  • 现金
  • 礼券

很简单...

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

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

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

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

【问题讨论】:

  • 如何创建一个数组,然后在 options_for_select 中传递该数组?

标签: ruby-on-rails activerecord ruby-on-rails-4


【解决方案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。我猜的是一些变量名,因为您没有发布相关代码。

【讨论】:

    【解决方案2】:

    我最终结合了 Nikita 的评论和老式的 &lt;&lt; 运算符。我最初想将查询保留在视图中,但那里变得太复杂了。

        @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") %>
    

    【讨论】:

      猜你喜欢
      • 2015-06-21
      • 2017-08-27
      • 1970-01-01
      • 2021-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 2014-08-19
      相关资源
      最近更新 更多