嵌套表单编辑问题,不需要的隐藏字段

时间:2011-06-27 11:51:05

标签: ruby-on-rails view

我在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_forhidden_field就会消失。 正如@jaydel所指出的,这(很可能)是我在散列中没有得到正确值的原因。 - 接下来的任务......

实际上这不是我的代码,所以现在我正在检查是否有任何重写,因为看起来它不是标准行为

2 个答案:

答案 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时,我没有在源代码中看到隐藏的输入...

如果这确实是你投入的内容,隐藏的输入可能是被拾取的,而不是用户在下拉列表中选择的内容。