Несколько моделей, одна форма в рельсах. Хотите создать родительский объект при создании вложенного объекта модели в форме - PullRequest
0 голосов
/ 06 июня 2011

Я хочу обновить несколько моделей с одной формой в рельсах. Я посмотрел на Railscasts # 196 и многие примеры вложенных моделей, но не могу заставить их работать. Разница в том, что я хочу создать запись в родительской модели в форме для дочерней модели.

У меня есть 3 модели:
Модель пользователя
has_many: продукты
has_many: магазины

Модель продукта
принадлежат: пользователю
принадлежат: магазин
accepts_nested_attributes_for: store

Модель магазина
has_many: продукты

У меня есть форма, в которую пользователь может ввести товар. Я хочу, чтобы у него было поле, в которое он также мог бы войти в магазин. Эта запись создаст запись в модели магазина, а также модель продукта с идентификатором store_id, сохраненным в модели магазина.

Форма

<%= form_for @product, :html => { :multipart => true } do |f| %>
<%= f.text_field :product_name %>
    <% f.fields_for :store do |store|%>
        <%= store.text_area :store_name %>
    <%end%>
<% end %>

Контроллер

    @product = Product.new
    @product.store.build

Этот код приводит к следующей ошибке:
неопределенный метод `build 'для nil: NilClass

Я просто хочу иметь возможность создать новую запись в магазине, когда они входят в продукт. (если это дублирующая запись, я не позволю, но я буду обрабатывать это в другом месте). Есть предложения?

1 Ответ

0 голосов
/ 17 января 2012

accept_nested_attributes_for

Работает только для отношений один к одному и один ко многим, где у вас первичная модель является основным родителем. Вы будете использовать его в модели User для продуктов и / или магазинов. Однако, похоже, что вы хотите создать новый магазин, когда они вводят товар, если магазин не существует, верно?

Поскольку кажется, что ваш магазин - это просто поле или два, я бы просто добавил хранилище в контроллер, используя поля для него.

...