2015-05-18 4 views
2

В моем приложении Invoice has_many Item. Поэтому в моем активном пользовательском интерфейсе администратора я хочу иметь возможность создавать счет-фактуру и в то же время создавать свои элементы.активный администратор, не может создать вложенный ресурс одновременно с родителем

Но я могу добавить только items после того, как invoice создан с помощью кнопки Edit Invoice в активном админе. Попытка создать их вместе не будет направлять меня никуда от страницы New Invoice. И нет никаких ошибок. Может ли кто-нибудь помочь мне в этом?

У меня есть следующая структура форма в моем app/admin/invoice.rb

permit_params :paid, :due, :customer_id, 
       items_attributes: [:price, :description, :invoice_id, :purchased_product_id] 

form multipart: true do |f| 
    f.inputs do 
    input :customer 
    input :due 
    input :paid, as: :radio 
    end 
    f.inputs "Items" do 
    f.has_many :items do |item| 
     item.input :price 
     item.input :description 
     item.input :purchased_product 
    end 
    end 
    f.actions 
end 

Я добавил accepts_nested_attributes_for в моей Invoice модели следующим образом:

class Invoice < ActiveRecord::Base 
    belongs_to :customer 
    has_many :items 

    accepts_nested_attributes_for :items, allow_destroy: true 

    validates :customer, presence: true 

Я использую Rails 4 и activeadmin '~> 1.0.0.pre1'

+0

что, если вы добавите ': id' в' items_attributes'? –

+0

@ AndreyDeineko, тоже не работал :(Спасибо за предложение, хотя – hexinpeter

ответ

1

Проблема заключается в том, чтобы иметь дело с моими действиями в моей модели Item. У меня было следующее правило проверки в моей Item классе модели

validates :price, :invoice, presence: true 

Это говорит о том, что для того, чтобы создать item, он должен иметь invoice подключен. Но так как в процессе создания invoice и содержащегося в нем items, invoice еще не сохранен в базе данных. items не удалось найти invoice, чтобы подключиться, и проверка не удалась.

Проблема решена путем удаления присутствия валидацию invoice, чтобы

validates :price, presence: true 
Смежные вопросы