开发者

nested forms problems on edit, unwanted hidden fields

I'm working in Rails2, the helper creates a hidden_field which is not helping me... I load the input like this:

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

and I get a result like this:

<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">

when I reach the controller my params hash is this:

(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: e@visrez.com

The value 175 in the hash refers to @user.account_user.id, the old value, but I don't have the @user.account.id of the new selection.

What am I doing wrong? Thank you

EDIT

I commented out the collection_select, and the hidden_field was still there, therefore... I need to change the title. If I comment out f.fields_for the hidden_field disappears. As pointed out by @jaydel, this is (very) probably 开发者_运维百科the reason why I don't get the right value in the hash. - And the quest goes on...

Actually it's not my code, so now I'm checking for any overriding, as looks like it's not the standard behavior


So we found out that the hidden field was originated by

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

A better look to the api unvealed the problem, and here is the correct use of fields_for:

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

So the method instead of the symbol.

Note: This code answers the question, but in my case I don't really need any fields_for in this relationship.


This is just a guess, but you're using user[account_user_attributes][id] in two places: the select itself, and the hidden input below it...is that something you put in?

When I use collection_select I don't see the hidden input in the source...

If this is indeed something you are putting in, it's possible that the hidden input is what's being picked up, rather than what the user selected in the dropdown.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜