19

管理バックエンドに active_admin を使用しています。

モデル「パブリッシャー」に :belongs_to モデル「アプリ」があります。

class App < ActiveRecord::Base
  belongs_to :publisher
end

class Publisher < ActiveRecord::Base
  has_many :apps
end

「アプリ」モデルの新しいエントリを作成するときに、既存のパブリッシャーを選択するか、(パブリッシャーがまだ作成されていない場合) 同じ (ネストされた) フォームで (または少なくともなしで) 新しいパブリッシャーを作成するオプションが必要ですページを離れます)。

active_admin でこれを行う方法はありますか?

これまでのところ (admin/app.rb 内) は次のとおりです。

form :html => { :enctype => "multipart/form-data" } do |f|
  f.inputs do
    f.input :title
    ...
  end

  f.inputs do
    f.semantic_fields_for :publisher do |p| # this is for has_many assocs, right?
      p.input :name
    end
  end

  f.buttons
end

何時間も検索した後、ヒントをいただければ幸いです...ありがとう!

4

4 に答える 4

9

まず、パブリッシャーモデルで、関連付けられたオブジェクトに対する適切なアクセス許可があることを確認します。

class App < ActiveRecord::Base
  attr_accessible :publisher_attributes

  belongs_to :publisher
  accepts_nested_attributes_for :publisher, reject_if: :all_blank
end

次に、ActiveAdminファイルで:

form do |f|
  f.inputs do
    f.input :title
    # ...
  end

  f.inputs do
    # Output the collection to select from the existing publishers
    f.input :publisher # It's that simple :)

    # Then the form to create a new one
    f.object.publisher.build # Needed to create the new instance
    f.semantic_fields_for :publisher do |p|
      p.input :name
    end
  end

  f.buttons
end

アプリで少し異なる設定を使用していますが(代わりにhas_and_belongs_to_manyの関係)、なんとか機能させることができました。このコードがエラーを出力するかどうか教えてください。

于 2012-11-01T22:11:07.143 に答える
7

form_builderクラスは、 と呼ばれるメソッドをサポートしていますhas_many

f.inputs do
  f.has_many :publisher do |p|
    p.input :name
  end
end

それは仕事をするはずです。

更新:あなたの質問を読み直しましたが、これは新しい発行者を追加することしかできませんが、選択または作成する方法がわかりません。

于 2011-09-06T04:55:39.227 に答える
5

ActiveAdminによると:http://activeadmin.info/docs/5-forms.html

あなたはただ以下のようにする必要があります:

f.input :publisher
于 2012-08-16T09:59:51.000 に答える
0

3つのことをする必要があることがわかりました。

フォームにセマンティック フィールドを追加する

f.semantic_fields_for :publisher do |j|
  j.input :name
end

コントローラーに nested_belongs_to ステートメントを追加する

controller do
    nested_belongs_to :publisher, optional: true
end

キーワード属性を使用して、パラメーターを受け入れるようにコントローラーで許可されたパラメーターを更新します。

permit_params publisher_attributes:[:id, :name]
于 2017-01-06T17:52:30.377 に答える