2016-01-18 2 views
0

Я установил вложенную форму и могу сохранить форму в моей БД, но когда я пытаюсь отобразить данные форм в показать/изменить действие, поля формы пустые.Показать/изменить действие, не отображая атрибуты вложенной формы, хотя вложенные атрибуты создаются в DB

Вот мои модели

invoice.rb 
class Invoice < ActiveRecord::Base 
has_many :items 
accepts_nested_attributes_for :items 
end 

item.rb 
class Item < ActiveRecord::Base 
belongs_to :invoice 
accepts_nested_attributes_for :invoice 
end 

И мой контроллер

def index 
@invoices = Invoice.all 
end 

def show 
@invoice = Invoice.find(params[:id]) 
@item = @invoice.items.build 
end 

# GET /invoices/new 
def new 
@invoice = Invoice.new 
@invoice.items.build # 
end 

# GET /invoices/1/edit 
def edit 
@invoice.items.build # 
end 

def create 
@invoice = Invoice.new(invoice_params) 

respond_to do |format| 
    if @invoice.save 
    format.html { redirect_to @invoice, notice: 'Invoice was successfully created.' } 
    format.json { render :show, status: :created, location: @invoice } 
    else 
    format.html { render :new } 
    format.json { render json: @invoice.errors, status: :unprocessable_entity } 
    end 
end 
end 


private 
def set_invoice 
    @invoice = Invoice.find(params[:id]) 
end 

def invoice_params 
    params.require(:invoice).permit(:amount, :company, :contragent, :currency, :date, items_attributes: [ :item_name, :item_description, :item_cost, :item_quantity, :item_price ]) 
end 
end 

Вот моя форма

<%= simple_form_for(@invoice) do |f| %> 

    <%= f.input_field :amount, class: "form-control" %> 
    <%= f.input_field :company, class: "form-control" %> 
    <%= f.input_field :currency, class: "form-control" %> 
    <%= f.input_field :contragent, class: "form-control" %> 
    <%= f.label :date, required: false %> 

    <%= f.fields_for :items do |h| %> 
    <%= h.error_notification %> 
    <%= h.label :item_name %> 
    <%= h.input_field :item_name, class: "form-control" %> 
    <%= h.label :item_description %> 
    <%= h.input_field :item_description, class: "form-control" %> 
    <%= h.label :item_cost %> 
    <%= h.input_field :item_cost, class: "form-control" %> 
    <%= h.label :item_quantity %> 
    <%= h.input_field :item_quantity, class: "form-control" %> 
    <%= h.label :item_price %> 
    <%= h.input_field :item_price, class: "form-control" %> 
    </br> 
    <% end %> 

    <%= f.button :submit, 'Submit Payment', class: 'btn btn-warning btn-sm', id: "submit_invoice" %>  
<% end %> 

После сохранения формы я получаю это в моих рельсах консоли

2.1.1 :018 > p = Invoice.where(id: 38).limit(1) 
Invoice Load (0.1ms) SELECT "invoices".* FROM "invoices" WHERE "invoices"."id" = ? LIMIT 1 [["id", 38]] 
=> #<ActiveRecord::Relation [#<Invoice id: 38, amount: #<BigDecimal:7f8b6994b000,'0.875E3',9(18)>, company: "Alex", contragent: "Hi", currency: "NZD", date: "2016-02-17", created_at: "2016-01-18 22:23:36", updated_at: "2016-01-18 22:23:36">]> 


2.1.1 :026 > p = Item.where(id: 7).limit(1) 
Item Load (0.1ms) SELECT "items".* FROM "items" WHERE "items"."id" = ? LIMIT 1 [["id", 7]] 
=> #<ActiveRecord::Relation [#<Item id: 7, item_name: "Test", item_description: "This is a test", item_cost: "200", item_quantity: "1", item_price: "400", created_at: "2016-01-18 22:23:36", updated_at: "2016-01-18 22:23:36", invoice_id: 38>]> 
2.1.1 :027 > 

Таким образом, идентификатор счета установлен в записи позиции, как я могу подключить его к счету в шоу и изменить действие?

+0

Вы пытались вызвать '' @ invoice'' в своем представлении ''/show/[: id] ''? Похоже, он уже определен в вашем контроллере. – apebeast

+0

@apebeast, если я изменяю '@ item' в действии show на' @item = @ invoice.items.find (params [: id]) ' Я получаю ' Не удалось найти элемент с 'id' = 38 [ WHERE "items". "Invoice_id" =?] ' – Aloalo

+0

' 'params [: id]' 'захватывает идентификатор вашего URL-адреса. В этом случае было найдено '38', затем запрошено и присвоено новому экземпляру Item. Поскольку нет элемента с идентификатором 'id = 38', он вернет, что он не найден. – apebeast

ответ

1

Вы должны вложенные ресурсы:

resources :invoices do 
    resources :items 
end 

Это позволит маршрутизатор для доступа к элементам в счете-фактуре:

/invoices/1/items/38

Подробнее о вложенных ресурсах: Rails Routing from the Outside In: Nested Resources.

+0

Спасибо, я просто положил это в 'config/routes', и он сработал – Aloalo

+0

Нет проблем! Удачи :) – apebeast

 Смежные вопросы

  • Нет связанных вопросов^_^