我在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: e@visrez.com
哈希值中的值175表示旧值@user.account_user.id
,但我没有新选择的@user.account.id
。
我做错了什么? 谢谢
修改
我注释掉了collection_select,hidden_field
仍然存在,因此......我需要更改标题。
如果我发表评论f.fields_for
,hidden_field
就会消失。
正如@jaydel所指出的,这(很可能)是我在散列中没有得到正确值的原因。 - 接下来的任务......
实际上这不是我的代码,所以现在我正在检查是否有任何重写,因为看起来它不是标准行为
答案 0 :(得分:1)
所以我们发现隐藏的字段是由
产生的- remote_form_for([:admin, @user]) do |f|
- f.fields_for :account_user do |a| # <------- here
= a.collection_select :id, @accounts, :id, :name
更好地了解api揭示了问题,这里正确使用了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 :(得分:-1)
这只是一个猜测,但你在两个地方使用user[account_user_attributes][id]
:选择本身,以及它下面的隐藏输入......是你投入的东西吗?
当我使用collection_select
时,我没有在源代码中看到隐藏的输入...
如果这确实是你投入的内容,隐藏的输入可能是被拾取的,而不是用户在下拉列表中选择的内容。