2009-03-05 90 views
2

這個問題一直在殺我。我玩了瑞恩貝茨複雜的形式,但我無法弄清楚我的問題。 我有這個模式:Rails動態多模型表單屬性


Location has_many :targets 
Target has_many :target_classifications

所有位置都顯示在頁面上。用戶可以通過jscript動態創建任意位置的目標,然後在位置3選擇(包含目標的可用分類)和目標值下添加一個表格行。點擊保存之前,可以爲任何位置創建任意數量的目標。
我使用RJS來呈現target_partial,其中有這樣的代碼: 我使用fields_for這樣:



每個選擇。當sumbmitted,我得到這個散列:

"new_targets"=> 
    {"7"=>[{"id"=>"13"}, {"id"=>"15"}, {"value"=>"67", "id"=>""}], 
    "4"=> 
    [{"id"=>"12"}, 
    {"id"=>"15"}, 
    {"value"=>"23", "id"=>""}, 
    {"id"=>"11"}, 
    {"id"=>"16"}, 
    {"value"=>"67", "id"=>""}]}, 

所以,按位置的每個目標(在這種情況下,「7」和「4」)分隔,但每個目標不分開。我想要的是:

 
"new_targets"=> 
    {"7"=>[ 
      {"target"=>[{"id"=>"13"}, {"id"=>"15"}, {"tonnes"=>"67"}]} 
     ], 
    "4"=>[ 
      {"target"=>[{"id"=>"12"},{"id"=>"15"},{"tonnes"=>"23"]}, 
      {"target"=>[{"id"=>"11"},{"id"=>"16"},{"tonnes"=>"67"]} 
     ] 
    } 

所以我可以遍歷每個位置的每個目標。我似乎無法在我的field_for方法中添加一個新的[目標]大括號(它爆炸了),但這就是我想要做的。有什麼想法嗎?

回答

0

這類問題是在這裏討論:

http://wonderfullyflawed.com/2009/02/17/rails-forms-microformat/

但它似乎是一個軌道2.3解決方案(不是我的選擇)。基本上,我希望有一個類似的形式,他們已經在網站上張貼:

<input name="creator[widget_attributes][0][id]" /> 
<input name="creator[widget_attributes][0][name]" /> 
<input name="creator[widget_attributes][0][price]" /> 

<input name="creator[widget_attributes][1][id]" /> 
<input name="creator[widget_attributes][1][name]" /> 
<input name="creator[widget_attributes][1][price]" /> 

只是一些方法來創建每個目標的唯一標識符(或在這種情況下,小部件的屬性),我想補充。 jscript增加了一個新的目標,這是一種艱難的行爲。我覺得應該有一些方法讓鋼軌自動爲我做這個

1

我不知道你是否這樣做,但你需要指定一個字符串,而不是使用fields_for時的對象。我看不到你的部分代碼,所以我可能會離開。無論如何,我這樣做是在幫手:

def fields_for_target(target, &block) 
    prefix = target.new_record? ? 'new' : 'existing' 
    fields_for("location[#{prefix}_target_attributes][]", target, &block) 
end 
+0

@brad:我不確定,但我認爲fields_for中的這些「[]」會做你想做的事 – klew 2009-03-22 16:21:48

-1

很容易。看起來accepts_nested_attributes_for。 :)

+0

正如我所提到的,rails 2.3目前不適合我。所以這是行不通的 – brad 2009-07-30 13:39:30