#ruby-on-rails-3 #forms #nested #models
#ruby-on-rails-3 #формы #вложенный #Модели
Вопрос:
Я хочу обновить несколько моделей одной формой в rails. Я просмотрел Railscasts # 196 и множество примеров вложенных моделей, но не могу заставить их работать. Разница в том, что я хочу создать запись в родительской модели в форме для дочерней модели.
У меня есть эти 3 модели:
Пользовательская модель
has_many: продукты
, has_many: магазины
Модель продукта
принадлежит тому, кто:пользователь
принадлежит тому, кто:магазин
accepts_nested_attributes_for :store
Храните модель
has_many: products
У меня есть форма, в которую пользователь может ввести продукт. Я хочу, чтобы у него было поле, в котором они также могут входить в хранилище. Эта запись создаст запись в модели магазина, а также модель продукта с идентификатором 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:
accepts_nested_attributes_for
Работает только для отношений «один к одному» и «один ко многим», где у вас есть основная модель, являющаяся основным родителем.. Вы бы использовали его в пользовательской модели для продуктов и / или магазинов. Однако, похоже, вы хотите создать новое хранилище при вводе продукта, если хранилище не существует, верно?
Поскольку кажется, что ваше хранилище — это всего лишь поле или два, я бы просто добавил хранилище в контроллер, используя поля для него..