Кажется, я не могу получить вложенную форму для создания в представлении рельсов для отношения 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
Если я попытаюсь использовать таинственный метод 'build', он просто запускается в контроллере, возможно, потому что сборка предназначена только для отношений с несколькими записями:
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 [владелец] не разрешен как имя переменной экземпляра".
У кого-нибудь еще есть новый метод accepts_nested_attributes_for, работающий с отношением own_to? Есть что-то особенное или другое, что вам нужно делать? Все официальные примеры и пример кода (например, отличный материал в Ryans Scraps) связаны с ассоциациями с несколькими записями.