2010-09-23 59 views
0

我對抽象類使用繼承控制器。我試圖避免在所有的後代控制器中重寫操作。我怎麼能找出表單值數組所在的關鍵字的名字?例如:是否有可能在Rails params哈希中檢測數組的鍵?

主類目前使用它來更新行

if @parent.update_attributes(params[:parent]) 

,從它繼承每個類都有將無法識別

<input type="text" value="" name="child[title]" id="child_title"> 

如何動態檢測自己的名字:我需要在params []中爲每個表單使用名稱?我會滿足於我的部分,處理編輯和新一些的form_for指導:

form_for @parent do |f| 

我已經試過下面是什麼,但我不能讓它做PUT。當我編輯它使一個新的行:

form_for @child, :as => :parent, :url => child_path do |f| 

回答

1

的方法的form_for的最後PARAM:您可以通過檢查「CONTROLLER_NAME」類似的東西,這樣做感謝沒有任何人(當然是保存Cryo),我的實例變量中一直有關鍵字的名字,我只是不知道如何把它弄出來,並將它變成我需要的params散列符號。我是如何做到的:

@element.update_attributes(params[@element.class.name.downcase.to_sym]) 

這樣我就可以創建一個資源,讓它從父控制器繼承,使用默認的窗體設置,並且仍然從父控制器回收邏輯。

0

我真的不知道你在問什麼。所以我請你原諒,如果我的答案是不相關的。

1.我的理解是,您要查找的第一件事是如何將params散列中的特定鍵映射到已發出投遞/放入請求的實際後代控制器。

keys = { 'ChildController1' => :child1, 'ChildController1' => :child2, }

key = key[controller.controller_name] 
@model.update_attributes(params[key]) 

2.如果需要執行PUT請求添加:html => {:method => :put}爲FormBuilder幫手(form_for @resource, :url => {resource_path(@resource)}, :html => {:method => :put}

+0

你幾乎明白我在問什麼。你提出的建議可能會奏效,但它有點脆弱,因爲我必須保持一個小孩的散列。我需要一個方法來幫助我刮取由Rails窗體生成的數組的鍵。我正在嘗試這樣做,所以我不必在兩個單獨的部分中使用:method =>:put和:method =>:post或者在控制器中重複自己。 – 2010-09-25 19:57:21