0

グループとシリーズの2つのテーブルがあります。セリエ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

次のことを試してください。

# 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)

このコードは、セリエに常にユニットが関連付けられていることを前提としています。そうでない場合はエラーが発生します。ユニット名が存在する場合にのみ表示する場合は、以下を使用してください。

@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 に答える
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 に答える