option_groups_from_collection_for_select特定方法组

时间:2014-02-18 13:57:19

标签: ruby-on-rails activeadmin

我想在ActiveAdmin中创建一个动态选择表单。 假设用户有多个订单。每个Order都有一个属性pay(boolean)。 选择用户后,下一个选择是该用户的订单付款。

option_groups_from_collection_for_select(User.order(:email), :orders, :email, :id, :name)

但我不知道如何仅显示付款订单。

1 个答案:

答案 0 :(得分:3)

您可以在User模型上定义一个方法,该方法将替换您传入的:orders参数。此方法应返回已支付的orders

尝试使用关联声明(这将为您添加方法):

class User < ActiveRecord::Base
  has_many :orders
  has_many :paid_orders, class_name: 'Order', -> { where pay: true }
end

现在,您的user个实例将使用paid_orders方法返回orders属性为pay的{​​{1}}。

现在将表单助手更改为:

true

应该这样做。

这里的想法是option_groups_from_collection_for_select(User.order(:email), :paid_orders, :email, :id, :name) 参数是:paid_orders实例上方法的名称。您可以自由定义任何您想要的方法,甚至可以手动定义:

User