Я не могу получить вложенную форму для генерации в представлении rails для отношения belongs_to
с использованием нового средства accepts_nested_attributes_for
Rails 2.3. Я проверил многие из доступных ресурсов, и похоже, что мой код должен работать, но 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
Возможно, именно здесь я делаю это «rong», поскольку у учетной записи может быть «владелец», а может и «пользователи», но у пользователя есть только одна «учетная запись», основанная на ключе 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, работающий с отношением own_to? Есть что-то особенное или другое, что вы должны сделать? Все официальные примеры и примеры кода (например, замечательные материалы на Ryans Scraps ) касаются ассоциаций с несколькими записями.