web-dev-qa-db-ja.com

rails ActiveAdminネストされたフォームhas_oneaccepts_attributes_for formtastic issue

私はActiveAdminを使用しており、Rails 3.1-以下がバグであるかどうか、または理解できない正しい方法があるかどうかを理解するのに問題があります。のネストされたモデルには1つの関係があるため、ページを作成してそのメタデータを1ステップで入力できます。ページhas_one meta_data、accepts_nested_attributes_for meta_data)

---(例1)この例では、新しいページをクリックすると、メタデータセクションはありますが、入力フィールドはありません-また、レコードを編集すると、正しく表示されますが、フィールドセットは2番目のセクションで複製されました...そしてsemantic_field_forをラップしているf.inputsを削除すると(これは理にかなっています)、完全に壊れてメタデータ領域に何も表示されません...

form do |f|
  f.inputs "Page Information" do
    f.input :name
    f.input :uri
    f.input :view
    f.input :body, :as => :text
    f.input :active
  end

  f.inputs "Meta Data" do
    f.semantic_fields_for :meta_data do |meta_form|
      meta_form.inputs :title, :description, :keywords, :name => "Meta Information"
    end
  end  
end

メタデータがおそらくインスタンス化されていないことは理解していますが、フォームブロックでどのようにインスタンス化するのかわかりませんか? (またはそれができる場合)-これを機能させる唯一の方法は、カスタムフォームを使用して、ビューにメタデータを作成することです。これは次のようになります。

2)どうやって回避しているのか、ハッキーなようです

<%= semantic_form_for [:admin, @page] do |f| %>
  <% @page.build_meta_data %>
  <%= f.inputs :name => "Page Information" do  %>
    <%= f.input :name %>
    <%= f.input :uri %>
    <%= f.input :view %>
    <%= f.input :body, :as => :text %>
    <%= f.input :active %>
  <% end %>
  <%= f.semantic_fields_for :meta_data do |meta_form| %>
    <%= meta_form.inputs :title, :description, :keywords, :name => "Meta Information" %>
  <% end %>

  <%= f.buttons %>
<% end %>

助けや説明を事前に感謝します。

(モデレーターに注意してください。私はこれについて別のスレッドを開始しましたが、明確ではなく、現在行っている回避策がありませんでした。したがって、質問の1つを削除する必要がある場合は、他の質問を削除してください)

24
thrice801

私はあなたのためのより良い解決策を見つけました。 inputsヘルパーで:forオプションを使用できます。

f.inputs "Meta Data", for: [:meta_data, f.object.meta_data || MetaData.new] do |meta_form|
  meta_form.input :title
  meta_form.input :description
  meta_form.input :keywords
end

これもうまくいくと思いますが、チェックしませんでした

f.inputs :title, :desctiption, :keywords, 
  name: "Meta Data",
  for: [:meta_data, f.object.meta_data || MetaData.new]
57
Pechkin

Rails 4)では、これはうまく機能し、素敵なデザインです

例:顧客は1つのアカウントを持っています

model/customer.rb

accepts_nested_attributes_for :account

admin/customer.rb

form do |f|
  f.inputs do
    f.input :user, input_html: { disabled: true }
      f.input :name
      f.input :address
      f.input :city
      f.input :country, as: :string
    end
    f.buttons

    f.inputs "Account Information", for: [:account, f.object.account] do |s|
      s.input :active, as: :boolean
      s.input :subscription, as: :boolean
      s.input :expires_on, as: :datepicker

      s.actions
    end
  end

  controller do
    def permitted_params
      params.permit!
    end
  end
end
23
vladCovaliov

私は同じ問題を抱えていました、私はあなたのハックで働き、それを動かしました。次に移動しました<% @page.build_meta_data %>このようなカスタムの新しいメソッドに

  controller do
    def new
      @tenant = Tenant.new
      @tenant.build_tenant_configurable
    end
  end

お役に立てれば

1
ben.m