我似乎无法使用Rails 2.3belongs_to
的新功能在 Rails 视图中生成嵌套表单以生成关系。accepts_nested_attributes_for
我确实检查了许多可用的资源,看起来我的代码应该可以正常工作,但fields_for
对我来说是爆炸性的,我怀疑它与我如何配置嵌套模型有关。
我遇到的错误是一个常见的错误,可能有很多原因:
'@account[owner]' is not allowed as an instance variable name
以下是涉及的两个模型:
class Account < ActiveRecord::Base
# Relationships
belongs_to :owner, :class_name => 'User', :foreign_key => 'owner_id'
accepts_nested_attributes_for :owner
has_many :users
end
class User < ActiveRecord::Base
belongs_to :account
end
也许这就是我做“荣”的地方,因为一个帐户可以有一个“所有者”,也可以有一个“用户”,但一个用户只有一个“帐户”,基于用户模型 account_id 键。
这是 new.html.haml 中让我大吃一惊的视图代码:
- form_for :account, :url => account_path do |account|
= account.text_field :name
- account.fields_for :owner do |owner|
= owner.text_field :name
这是新操作的控制器代码:
class AccountsController < ApplicationController
# GET /account/new
def new
@account = Account.new
end
end
当我尝试加载 /account/new 时,出现以下异常:
NameError in Accounts#new
Showing app/views/accounts/new.html.haml where line #63 raised:
@account[owner] is not allowed as an instance variable name
如果我尝试使用神秘的“构建”方法,它只会在控制器中爆炸,可能是因为构建只是用于多记录关系:
class AccountsController < ApplicationController
# GET /account/new
def new
@account = Account.new
@account.owner.build
end
end
You have a nil object when you didn't expect it!
The error occurred while evaluating nil.build
如果我尝试在控制器中使用@account.owner_attributes = {} 或@account.owner = User.new 进行设置,我会回到原来的错误,“@account[owner] 不允许作为实例变量的名称”。
有没有其他人有新的accepts_nested_attributes_for 方法来处理belongs_to 关系?你有什么特别或不同的事情要做吗?所有官方示例和示例代码(如Ryans Scraps 上的精彩内容)都与多记录关联有关。