accepts_nested_attributes_for не работает должным образом для отношения has_one - PullRequest
12 голосов
/ 03 марта 2010

У меня проблемы с accepts_nested_attributes_for в отношении has_one.

Модели: купля-продажа.

class Purchase < ActiveRecord::Base 
  has_one :sale, :dependent => :destroy
  accepts_nested_attributes_for :sale
end

class Sale < ActiveRecord::Base  
  belongs_to :purchase
end

В контроллере / новое действие:

@purchase = Purchase.new(
  :club_id => @club.id,
  :subcategory_id => subcategory.id
)

В представлении (HAML):

- form_for(@purchase) do |f|
  # some fields for purchase
  - f.fields_for :sale do |s|
    = s.text_field :amount, :size => 6
    # and so on

ПРОБЛЕМА: это на самом деле не отображает какие-либо поля ввода для продажи на мой взгляд. Поля покупки отображаются нормально, но поля продажи не отображаются.

Если я добавлю эту строку в контроллер:

@purchase.sale.build

Я получаю эту ошибку:

неопределенный метод `build 'для nil: NilClass

Что еще более странно, если я изменю тип ассоциации на has_many вместо has_one, создав, таким образом:

class Purchase < ActiveRecord::Base 
  has_many :sales, :dependent => :destroy
  accepts_nested_attributes_for :sales
end

Все начинает работать просто отлично - поля продаж начинают появляться, на мой взгляд, @ purchase.sales.build не возвращает ошибку и так далее. Конечно, это не очень помогает мне, так как предполагается, что это has_many, а не has_one.

1 Ответ

28 голосов
/ 04 марта 2010

Сборка has_one отличается от has_many


@purchase.build_sale

См. Документацию по has_one http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#M001834

Account # build_beneficiary (аналогично Beneficiary.new ("account_id" => id))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...