Push-Daten. Ich versuche, einen Parameter in die Datenbank zu schieben, wenn ich ein Objekt erstelle. Ich habe es funktioniert, wenn ich den Integer wie mit dem kommentierten Code unten erzwinge, aber aus irgendeinem Grund kann ich nicht bekommen, dass es in der Datenbank hinzugefügt wird, ich benutze die Methode params [: subscription_id]. Ich kann die Parameter in meinem Server sehen, sehe aber nicht, dass sie in die Zertifikattabelle eingefügt werden. Wenn ich den Integer in meinem Controller erzwinge, wird es durchlaufen und ich kann sehen, dass die subscriptions_id übergeben wird.Problem mit Param nicht Daten in die Datenbank in Rails
Hat dies irgendeinen Grund zu tun, mit meiner Beziehung eine has_one Beziehung vielleicht?
Certificate Controller
class CertificatesController < ApplicationController
def new
@certificate = Certificate.new
end
def create
@certificate = Certificate.new(certificate_params)
@certificate.subscription_id = params[:subscription_id]
#@certificate.subscription_id = 1
if @certificate.save
flash[:success] = "The certificate has been uploaded"
redirect_to :back
else
render 'new'
end
end
private
def certificate_params
params.require(:certificate).permit(:document, :title, :subscription_id)
end
end
anzeigen Code:
<%= link_to "upload certificate", new_certificate_path(subscription_id: subscription.id) %>
Modelle
class Subscription < ActiveRecord::Base
belongs_to :user
belongs_to :course
has_one :certificate
end
class Certificate < ActiveRecord::Base
belongs_to :subscription
has_attached_file :document
#validates_attachment :document, content_type: %w(application/pdf application/msword application/vnd.openxmlformats-officedocument.wordprocessingml.document)
do_not_validate_attachment_file_type :document
end
Zertifikat Formular
<div class="row">
<div class="site-forms">
<div class="col-md-10">
<%= simple_form_for @certificate do |f| %>
<!-- <= f.input :course_img, as: :file, required: true, label: "Please upload a brand image for your course" %><br> -->
<span class="btn btn-default btn-file">
<i class="fa fa-cloud-upload fa-lg"></i> Upload Image
<%= f.input :document, as: :file, required: true, label: false %>
</span> Please upload Certificate as PDF <br><br>
<%= f.input :title, placeholder: "Course Title", required: true, label: "Course Title" %>
<%= f.button :submit, class: "btn btn-primary" %>
<% end %>
</div>
</div>
</div>
Dies ist wahrscheinlich etwas dumm ich bin fehlt, aber ich kann es die Arbeit auf wenn ich die Ganzzahl in der Code in der Steuerung auskommentiert. Ich bin mir fast sicher, dass der Params-Code korrekt ist. Vielen Dank.
Hinzugefügt logs
Started POST "/certificates" for ::1 at 2017-05-23 20:40:30 +0100
Processing by CertificatesController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"6fV0xLOoy6ppNG7PYp37vkKqJnxU17nLPSK/mvbgH8k3s2LyaMEOJlekq5S0Ed4fpbNcqVe+cBsu5F38ACCmcg==", "certificate"=>{"document"=>#<ActionDispatch::Http::UploadedFile:0x007f954362c160 @tempfile=#<Tempfile:/var/folders/gx/86yj74bx3md88cfn2fwc975h0000gn/T/RackMultipart20170523-5261-1n2mwfl.png>, @original_filename="duck.png", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"certificate[document]\"; filename=\"duck.png\"\r\nContent-Type: image/png\r\n">, "title"=>"Test"}, "commit"=>"Create Certificate"}
Command :: PATH=/usr/local/bin/:$PATH; file -b --mime '/var/folders/gx/86yj74bx3md88cfn2fwc975h0000gn/T/36846677e3a8f4c0b16d8bdf8ef1860820170523-5261-e90bny.png'
(0.1ms) begin transaction
Command :: PATH=/usr/local/bin/:$PATH; file -b --mime '/var/folders/gx/86yj74bx3md88cfn2fwc975h0000gn/T/36846677e3a8f4c0b16d8bdf8ef1860820170523-5261-1d907er.png'
SQL (0.3ms) INSERT INTO "certificates" ("document_file_name", "document_content_type", "document_file_size", "document_updated_at", "title", "created_at", "updated_at") VALUES (?, ?, ?, ?, ?, ?, ?) [["document_file_name", "duck.png"], ["document_content_type", "image/png"], ["document_file_size", 49114], ["document_updated_at", "2017-05-23 19:40:30.662715"], ["title", "Test"], ["created_at", "2017-05-23 19:40:30.683041"], ["updated_at", "2017-05-23 19:40:30.683041"]]
(0.7ms) commit transaction
Redirected to http://localhost:3000/certificates/new?subscription_id=3
Completed 302 Found in 36ms (ActiveRecord: 1.1ms)
Started GET "/certificates/new?subscription_id=3" for ::1 at 2017-05-23 20:40:30 +0100
Processing by CertificatesController#new as HTML
Parameters: {"subscription_id"=>"3"}
Rendered certificates/_form.html.erb (7.7ms)
Rendered certificates/new.html.erb within layouts/application (8.7ms)
Rendered shared/_message.html.erb (0.1ms)
Completed 200 OK in 95ms (Views: 94.3ms | ActiveRecord: 0.0ms)
Haben Sie keine Zeit, um es in diesem Moment zu tauchen, wird später mehr sehen. Aber mein Bauch geht in dieser Situation sofort zu "akzeptiert geschachtelte Attribute für". Auf diese Weise kann der Zertifikatscontroller das durch '@ certificatesubscription_id' repräsentierte Attribut setzen. Ist das entsprechende Abonnement bereits vorhanden? Oder benötigt es den '.build' Befehl? – Beartech
Bitte geben Sie auch Ihre Webserver-Konsolenausgabe an, wenn Sie versuchen, zu speichern. Auf diese Weise können wir die tatsächlichen 'params []' sehen, die an den Controller übergeben werden. Es ist wahrscheinlich, dass Ihr Wert "nil" ist, also ist das, was übergeben wird, es sei denn, Sie nennen in Ihrem Controller explizit "= 1". – Beartech
http://guides.rubyonrails.org/form_helpers.html#building-complex-forms – Beartech