5

私は Active Admin を使用しており、2 つのモデル間に 1 対多の関係があります。

class WeeklyMenu < ActiveRecord::Base
  has_many :menu_items
  attr_accessible :menu_items
  accepts_nested_attributes_for :menu_items
end

WeeklyMenu の管理ページで、5 つの menu_items を表示したいと思います。これは、現時点で私の管理ページがどのように見えるかです。

ActiveAdmin.register WeeklyMenu do
  form do |f|
    f.inputs "Details" do
      f.input :title
      f.input :week
    end

    f.has_many :menu_items do |menu_item|
      menu_item.input :title
    end

    f.buttons
  end
end

これにより、さらに多くの menu_items を追加するための非常に優れたインターフェイスが得られますが、ユーザーには 5 つ (それ以上でもそれ以下でもない) を持たせたいと考えています。どうすればそれを行うことができますか?

4

4 に答える 4

3

fields_for@ user946611が提案した答えは私にはうまくいきませんでしたが、次のコードはうまくいきました:

f.inputs 'Menu Items' do
  (5 - f.object.menu_items.count).times do
    f.object.menu_items.build
  end

  f.has_many :menu_items, new_record: false do |m|
    m.input :title
    m.input(:_destroy, as: :boolean, required: false, label: 'Remove') if m.object.persisted?
  end
end

作成された数が多いかどうかに関係なく、アイテムのフォームは常に 5 つ表示されます。「new_record: false新しいメニュー項目の追加」ボタンを無効にします。

于 2013-12-09T22:08:46.643 に答える
2

フォームを再度編集する場合、@ user946611 の回答には menu_item が存在するかどうかを判断する条件がありません。これは、フォームを送信して編集すると、別の 5 つの menu_item が生成されるためです。

したがって、次のようになります。

f.inputs 'Menu Items' do
    if !f.object.menu_items.present?
      5.times do
      f.object.menu_items.build
      end
    end
    f.fields_for :menu_items do |m|
      m.inputs do
        m.input :title
      end
    end
  end
于 2015-02-26T08:28:46.880 に答える