fields_for为关联生成错误的名称

时间:2011-12-22 10:04:47

标签: ruby-on-rails devise

我遇到的问题是,当我以嵌套的形式使用fields_for时,它会生成名称错误的字段。

简化模型是:

class User < ActiveRecord::Base
  has_one :owned_account, :class_name => "Account", :foreign_key => "user_id"
  accepts_nested_attributes_for :owned_account
  attr_accessible :email, ... :owned_account, :owned_account_attributes
end

class Account < ActiveRecord::Base
  belongs_to :owner, :class_name => 'User', :foreign_key => 'user_id'
  attr_accessible :subdomain
end

在视图中(顺便说一下,这是一个Devise视图)

<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
  <div class="inputs">
    <% resource.build_owned_account %>
    <%= f.fields_for resource.owned_account do |a| %>
      <p>
      <%= a.label :subdomain, "Account handle" %>
      <%= a.text_field :subdomain %>
      </p>
    <% end %>
    <p>
...
<% end %>

它生成的标记是:

  <p>
  <label for="user_account_subdomain">Account handle</label>
  <input id="user_account_subdomain" name="user[account][subdomain]" size="30" type="text">
  </p>

所以它正在生成用户[account] [subdomain]而不是user [owned_account] [subdomain]。我已经尝试重写该字段的名称,但似乎可以使其工作。

任何帮助都会非常感谢,提前谢谢。

2 个答案:

答案 0 :(得分:3)

IIRC rails根据模型名称而不是关联名称生成名称。

你尝试过类似的事情吗?

<%= f.fields_for :owned_account, resource.owned_account do |a| %>

答案 1 :(得分:1)

为了触发你需要做的嵌套属性魔力

f.fields_for :owned_account do |account_fields|

如果您提供帐户的实际实例,则不知道它是与owned_account关联相关的实例