2016-10-12 2 views
0

zu speichern Ich kann die Daten nicht in meinem Modell speichern. Jedes Mal, wenn der Code ausgeführt wird, wird er in die Else-Anweisung geleitet, die die Daten in der CREATE-Aktion nicht speichern konnte. Irgendeine Idee?Nicht in der Lage, Daten in Modell

Das ist mein invoices_controller.rb

Klasse InvoicesController < Application

def new 
    @permits = Permit.find(params[:permit_id]) 
    @invoice = Invoice.new 
    end 

    def create 
    @permit = Permit.find(params[:permit_id]) 
    @invoice = @permit.build_invoice(invoice_params) 
    if @invoice.save 
     redirect_to payment_path 
    else 
     redirect_to root_path 
    end 
    end 

    private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_invoice 
    @invoice = Invoice.find(params[:id]) 
    end 

    # Never trust parameters from the scary internet, only allow the white list through. 
    def invoice_params 
    params.require(:invoice).permit(:vehicle_type, :name, :department, :carplate, :duration, :permitstart, :permitend, :price, :time) 
    end 
end 

Rechnungen/new.html.erb (Dies ist die Daten, die ich retten wollte)

<% provide(:title, 'Invoice') %> 
<h1>Invoice</h1> 

<div class="row"> 
    <div class="col-md-6 col-md-offset-3" id="datashow"> 

    <%= form_for(@invoice) do |f| %> 
    <h2>Time : <%[email protected]_at%></h2></br> 
    <h2>Invoice ID : <%[email protected]%></h2></br> 

     <%= f.label :"Vehicle" %> 
     <%= f.text_field :vehicle_type, :value => @permits.vehicle_type, readonly: true %> 

     <%= f.label :"License Plate" %> 
     <%= f.text_field :carplate, :value => @permits.carplate, readonly: true %> 

     <%= f.label :"Student ID" %> 
     <%= f.text_field :studentid, :value => @permits.studentid, readonly: true %> 

     <%= f.label :name %> 
     <%= f.text_field :name, :value => @permits.name, readonly: true %> 

     <%= f.label :"Department of applicant" %> 
     <%= f.text_field :department, :value => @permits.department, readonly: true %> 

     <%= f.label :permit_start %> 
     <%= f.text_field :permitstart, :value => @permits.permitstart, readonly: true %> 

     <%= f.label :permit_end %> 
     <%= f.text_field :permitend, :value => @permits.permitend, readonly: true %> 

    <%= f.label :"Price" %> 
    <%= (f.text_field :price, :value => '$AUD 50' , readonly: true) %> 

     <%= hidden_field_tag(:permit_id, @permits.id) %> 
     <%= f.submit "Make Payment", class: "btn btn-primary" %> 
    <% end %> 
    </div> 
</div> 

Rechnung .rb

class Invoice < ApplicationRecord 
    belongs_to :user 
    has_one :receipt 
    belongs_to :permit 
end 

Permit.rb

class Permit < ApplicationRecord 
    belongs_to :user 
    has_one :invoice 

end 
+0

Feuer auf einen Debugger (hebel, byebug, etc ...). Jede ernsthafte Rails-Entwicklung wird sowieso benötigt –

Antwort

2

Wenn Sie sich nicht sicher, warum das Objekt nicht erstellt wird, haben Sie mehrere Möglichkeiten. Zuerst können Sie @invoice.save! anstelle von @invoice.save während des Debuggens verwenden. Dies wird eine Ausnahme auslösen und Ihnen einige Hinweise geben, was falsch läuft.

Oder Sie können einen Debugger verwenden und überprüfen @invoice.errors.full_messages.

Weiter können Sie @invoice.errors.full_messages über Rails.logger.error @invoice.errors.full_messages.to_sentence ausgeben.

Oder können Sie die Fehlermeldung als Flash-Nachricht verwenden flash[:error] = @item.errors.full_messages.to_sentence

Dies sollten Sie den Fehler finden helfen.

0

aus: build method on ruby on rails

build nicht „schaffen“ ein Datensatz in der Datenbank, nur ein neues Objekt im Speicher erstellen, so dass die Sicht dieses Objekt nehmen und etwas zeigt, vor allem für ein Formular.

So funktioniert Build nicht, weil Sie einen Datensatz nicht erstellen (erstellen und speichern). Build speichert keinen Datensatz.

Versuchen:

def create 
    @permit = Permit.find(params[:permit_id]) 
    @invoice = @permit.invoices.create(invoice_params) 
    if @invoice.save 
    redirect_to payment_path 
    else 
    redirect_to root_path 
end 
end