0

我有两个表:组和系列。一个意甲has_many组和一个意甲组belongs_to。我正在使用 Formstastic 自动生成<select>包含所有系列的系列,以便用户能够选择与正在创建的组相关的系列。而是一个系列belongs_to的表台,哪个has_many系列。由于系列具有相同的名称,因此用户不可能确切地知道他在 中选择了哪个系列<select>,除非他知道特定系列属于哪个单元。为此,我希望每个<option>人都具有以下格式:

<option value="serie_id">serie.name – unit.name</option>

到目前为止(和工作)我所拥有的是:

ActiveAdmin.register Group do

  form do |f|
    f.inputs "Group" do       
        f.input :serie
        f.input :name
    end                               
  f.actions                         
  end 
end

任何其他关于如何实现我的目标的建议(准确指定与该单元相关的系列)将不胜感激。

4

2 回答 2

1

也许您可以向您的 Serie 模型添加一个方法:

def fomatted_name
  name + unit.name # if you have an association belongs_to :unit
end

在您看来:

ActiveAdmin.register Group do

  form do |f|
    f.inputs "Group" do       
      f.input :serie, :label_method => :formatted_name, :as => :select
      f.input :name
    end                               
    f.actions                         
  end 
end
于 2013-02-05T21:49:38.160 回答
1

尝试以下操作:

# in controller
@custom_collection = Serie.all.map{ |s| ["#{s.name} - #{s.unit.name}", s.id]}

# in view
f.input :serie, collection: options_for_select(@custom_collection)

此代码假定 Serie 始终具有关联的 Unit。如果没有,它将引发错误。如果您只想在单位名称存在时显示单位名称,请使用以下命令:

@custom_collection = Serie.all.map do |serie|
  composed_name = s.name
  composed_name += " - #{s.unit.name}" if s.unit.present?
  [composed_name, s.id]
end
于 2013-02-05T21:34:54.603 回答