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.
精彩评论