2014-11-25 67 views
0

我有一個模型,看起來像這樣:主動管理:對同一類的兩個對象兩個嵌套形式

class MyModel < ActiveRecord::Base 
    belongs_to :some_relation1 
    belongs_to :some_relation2 # Same class as some_relation1 
end 

MyModel ActiveAdmin表單頁面裏面,我想說明兩個內部形式:一種爲some_relation1另一個用於some_relation2

我做這樣的:

f.inputs 'Test 1' do 
    f.semantic_fields_for(f.object.some_relation1 || f.object.build_some_relation1) do |inner_f| 
    inner_f.inputs '' do 
     # Some inputs 
    end 
    end 
end 

f.inputs 'Test 1' do 
    f.semantic_fields_for(f.object.some_relation2 || f.object.build_some_relation2) do |inner_f| 
    inner_f.inputs '' do 
     # Some inputs 
    end 
    end 
end 

我的第一個問題是,ActiveAdmin似乎基於底層對象的類HTML輸入類,所以對於some_relation1some_relation2的投入將結束與類和衝突。

在這一點上,我試圖爲some_relation2做一個特殊的類,它繼承了它的前一個類,以便ActiveAdmin生成唯一的HTML類。 這工作,但現在我得到提交表單時,這個錯誤:

SomeClass2(#70117816523800) expected, got ActionController::Parameters(#70117783961220) 

我不知所措就在這裏。 有沒有人知道正確的方法來做到這一點,或者一個猴子補丁將此功能添加到ActiveAdmin?

回答

1

起初,我的意圖是分享活動管理中可用的東西,這可能適用於您的情況。但是因爲我對你的問題沒有太大的信心,請你回顧我的答案,並告訴我這是否有幫助?

ActiveAdmin.register後做

form do |f| 
    ....... 
    f.inputs do 
    f.has_many :some_relation_one, :allow_destroy => true, as: :uniq_name ,:heading => 'Themes', :new_record => false do |cf| 
     cf.input :title 
    end 
    end 
    f.actions 
end 
end 

同時請確保您添加accept_nested_attributes_for:在您需要的型號some_relation_ship被接受。

+0

在您的Post示例中,Post將有兩個belongs_to關係。我想要的是顯示這些關係的兩個嵌套窗體(這兩個「鏈接」到相同類型的記錄)。所以我不想在這裏使用'has_many',除非它是唯一的解決方案,因爲它似乎不適合。 – 2014-11-25 15:19:56

+1

在那種情況下是有解決方案的!您可以更改表單名稱,並可以通過模型和控制器進行處理。 – Rubyrider 2014-11-25 15:21:19

+1

以下事情應該可以工作:您只需要管理在模型/控制器中獲取這些數據。 'f.has_many:some_relation_one,:allow_destroy => true,如::uniq_name,:heading =>'Themes',::new_record => false do | cf |' – Rubyrider 2014-11-25 15:22:25

相關問題