2013-03-01 30 views
4

當我使用simple_form_for @model創建表單時,在提交後,參數具有在參數[model]下分組的所有屬性。我如何獲得simple_form來放棄這個分組,並直接發送它(在params根目錄下)?simple_form_for:從參數中刪除根模型名稱

<%= simple_form_for @user, do |f| %> 
<%= f.input :name %> 
<%= f.input :password %> 
<%= f.submit %> 

現在的名稱和密碼的屬性通常在PARAMS發[:用戶] [:名字],則params [:用戶] [:密碼]等我怎麼simple_form張貼這些作爲PARAMS [ :name],params [:password]等?

謝謝!
Ramkumar

PS:如果你想知道爲什麼我需要這個,我的應用程序的大部分是作爲一個API,我已經建立了一套方法來驗證其預期一些屬性是在根的請求。在一個罕見的情況下(忘記密碼),我實際上需要提交一個表單,我正在尋找一種方法來使用這些方法。

回答

1

兩種方式我能想到的:

首先是,不要用simple_form建立自己的形式,而是通過用手或用form_tag*_tag方法做到這一點。這些將允許您更詳細地指定在表單中使用的參數。

但是,如果您想保留simple_form,那麼請讓它調用不同的控制器操作。重構控制器以將邏輯剝離成單獨的方法。喜歡的東西:

class UsersController 
    def create_from_api 
    controller_logic(params) 
    end 
    def create_from_form 
    controller_logic(params[:user]) 
    end 
    def controller_logic(params) 
    [actual work happens here] 
    end 
end 
+0

謝謝。重構它是:) – lewstherin 2013-03-01 22:38:20

1

你可以明確地通過input_html傳遞給它定義名稱的輸入:

input_html: { name: :name } 

(需要這個自己用重定向到我身邊來發送資源到第三方端點這依靠簡單的屬性名稱,但我其實是想不通過標籤建立了標籤和輸入;))

也看到simple form builder impl

+0

非常感謝你!花費很多時間直到找到您的解決方案。 – Netsu 2016-05-14 08:28:49