私は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つを削除する必要がある場合は、他の質問を削除してください)
私はあなたのためのより良い解決策を見つけました。 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]
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
私は同じ問題を抱えていました、私はあなたのハックで働き、それを動かしました。次に移動しました<% @page.build_meta_data %>
このようなカスタムの新しいメソッドに
controller do
def new
@tenant = Tenant.new
@tenant.build_tenant_configurable
end
end
お役に立てれば