2011-06-27 91 views
0

我在Rails2工作,助手創建一個hidden_field這並沒有幫助我...我 加載輸入這樣的:嵌套形式的問題,不需要隱藏字段

- remote_form_for([:admin, @user]) do |f| 
    // [...] 
    - f.fields_for :account_user do |a| 
     = a.collection_select :id, @accounts, :id, :name}, { :style => "width:330px;"} 

和我結果是這樣的:

<select style="width: 330px;" name="user[account_user_attributes][id]" id="user_account_user_attributes_id"> 
    <option value="20">public</option> 
    <option value="21">Test Account</option> 
    <option value="73">ggg</option> 
</select> 
<input type="hidden" value="175" name="user[account_user_attributes][id]" id="user_account_user_attributes_id"> 

當我到達控制器我PARAMS哈希是這樣的:

(rdb:228) y params 
--- !map:HashWithIndifferentAccess 
commit: Save booker 
_method: put 
action: update 
id: "50" 
controller: admin/users 
user: !map:HashWithIndifferentAccess 
    user_role: agent 
    password_confirmation: "" 
    username: ERIK 
    account_user_attributes: !map:HashWithIndifferentAccess 
    id: "175" 
    password: "" 
    email: [email protected] 

哈希中的值175指的是舊值,即@user.account_user.id,但我沒有新選擇的@user.account.id

我在做什麼錯? 謝謝

編輯

我註釋掉collection_select和hidden_field仍然存在,所以...我需要更改標題。 如果我註釋掉f.fields_forhidden_field消失。 正如@jaydel所指出的,這很可能是我沒有在哈希中獲得正確值的原因。 - 和追求的推移...

其實這不是我的代碼,所以現在我檢查任何壓倒一切的,因爲看起來它不是標準的行爲

回答

1

於是,我們發現,隱藏字段最初由

- remote_form_for([:admin, @user]) do |f| 
    - f.fields_for :account_user do |a| # <------- here 
    = a.collection_select :id, @accounts, :id, :name 

更好看的API unvealed的問題,這裏是正確使用fields_for

- remote_form_for([:admin, @user]) do |f| 
    - f.fields_for @user.account_user do |a| 
    = a.collection_select :id, @accounts, :id, :name 

所以方法而不是符號。

注:此代碼回答了這個問題,但在我的情況下,我並不需要任何fields_for在這種關係。

-1

這只是一種猜測,但你」在兩個地方重新使用user[account_user_attributes][id]:選擇本身以及其下面的隱藏輸入...是你放入的東西嗎?

當我使用collection_select我沒有看到源代碼中的隱藏輸入...

如果這確實是一件你投入,它可能是隱藏的輸入是什麼正在回升,而不是用戶在下拉列表中選擇了什麼。