2017-03-23 4 views
0

I Büroklammer-5.0.0 benutze und Rails 5.0.2.This ist mein Code in Controllerkann nicht POST-Anforderung verarbeiten, für Maßnahmen im Controller erstellen

class PawsController < ApplicationController 
before_action :set_paw, only: [:show, :edit] 
def index 
    @paws = Paw.all 
end 

def show 
end 

def new 
    @paw = Paw.new 
end 

def edit 
end 

def create 
@paw = Paw.new(paw_params) 
respond_to do |format| 
    if @paw.save 
    format.html { redirect_to @paw, notice: 'Paw was successfully created.' } 
    format.json { render :show, status: :created, location: @paw } 

    else 
    format.html { render :new } 
    format.json { render json: @paw.errors, status: :unprocessable_entity } 
    end 
end 
end 


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


def paw_params 
    params.require(:paw).permit(:avatar,:name) if params[:avatar] 
end 
end 

Avatar hier ist die Spalte für paw welche Läden images.In Model Ich habe die erforderlichen Validierungen für Büroklammer und Validierung für das Vorhandensein von Namen hinzugefügt.

Problem: In Schienen Konsole Ich bin erfolgreich in der Lage die Image-Datei von meinem Computer zu öffnen und es in die Pfote Modell dh @ paw.save gibt true zurück, in der Konsole hinzufügen, aber im Browser es Umleitungen Ich auf die new_paw_url mit zwei Fehlern. Der Name darf nicht leer sein. und Avatar darf nicht leer sein. Es gibt keine Ausnahmen oder Fehler zwischen den Prozess geworfen. Ich habe keine Ahnung, wie ich das beheben soll.

ActiveRecord::SchemaMigration Load (0.2ms) SELECT "schema_migrations".* FROM "schema_migrations" 
Processing by PawsController#create as HTML 
Parameters: {"utf8"=>"✓","authenticity_token"=>"zKpb2XFEG4FqX3aVQx9oyyGI9x2NpmF+lmt4eZy/3p3VZr2eWYvHLaEjS5AvisJ6iEbRm61SJkJSuTpMx4c0JA==", "paw"=>{"name"=>"Sheru", "gender"=>"Male", "breed"=>"", "dob"=>"", "avatar"=>#<ActionDispatch::Http::UploadedFile:0x005608576e1f30 @tempfile=#<Tempfile:/tmp/RackMultipart20170323-14343-1o95nqx.jpg>, @original_filename="art.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"paw[avatar]\"; filename=\"art.jpg\"\r\nContent-Type: image/jpeg\r\n">}, "commit"=>"Upload"} 
(0.1ms) begin transaction 
(0.1ms) rollback transaction 
(0.1ms) begin transaction 
(0.1ms) rollback transaction 
Rendering paws/new.html.erb within layouts/application 
Rendered paws/_form.html.erb (15.8ms) 
Rendered paws/new.html.erb within layouts/application (17.3ms) 
Rendered layouts/_navbar.html.erb (0.6ms) 
Completed 200 OK in 326ms (Views: 287.5ms | ActiveRecord: 2.0ms) 

Fühlen Sie sich frei, für irgendwelche anderen Codeschnipsel von mir zu bitten.

+0

Wie sehen Ihre Parameter aus, wenn Sie sie einreichen? – wendybeth

+0

Ich habe Params hinzugefügt .... Params außer Name und Avatar haben keine Validierungen –

+0

Nevermind, ich habe nur einen genaueren Blick auf Ihre Params und sehen, es gibt keine Zugehörigkeiten. :/Bearbeiten Sie diesen Kommentar, da es eine nutzlose Idee hatte. – wendybeth

Antwort

0

Ihre paw_params-Methode bricht es. Entfernen Sie die if-Anweisung und es sollte funktionieren. Das Problem, das Sie haben, ist, dass die Params, die Sie durch Ihren Controller erhalten, in der params[paw]-Hash und nicht in der params Hash verschachtelt sind. Ihre paw_params if-Anweisung sollte an der Konsole Ihres params-Hash

params.require(:paw).permit(:avatar,:name) if params[:paw][:avatar] 

Schauen Sie, und Sie werden sehen, dass Rails Nest alle params über ein Formular Helfer innerhalb der Klassenname des Objekts vorgelegt. In diesem Fall ist es Pfote.

"paw"=>{"name"=>"Sheru", "gender"=>"Male", "breed"=>"", "dob"=>"", "avatar"=>#<ActionDispatch::Http::UploadedFile:0x005608576e1f30 

Mehr offensichtlich:

params[:name]#nil

params[:paw][:name]#"Sheru"

Außerdem ist es keine gute Praxis conditionals für strong_paramaters hinzuzufügen, bezogen auf das Vorhandensein bestimmter Eigenschaften. Wenn jemand einen Namen ohne Avatar eingibt, wird der Name aufgrund von strong_parameters nicht erlaubt, würde aber dem Benutzer eine schlechte Rückmeldung geben. Stattdessen sollten Sie Validierungen in Ihrem Paw-Modell verwenden, bei denen sowohl der Name als auch der Avatar vorhanden sein müssen.

+1

so die Geschichte war, gibt es einige Fehler in Validierungen für Büroklammer [siehe hier] (https://github.com/galetahub/ckeditor/issues/399), die ich versuchte zu beheben, aber es warf dann einen weiteren Fehler * ActionController :: ParameterMissing Büroklammer * zu lösen es ich hinzugefügt wenn Bedingung in der paw_params.Aber andere Attribute kamen und vermasselt. Ich habe dann versucht, Validierungen zu beheben und zu entfernen, wenn, ahhnd nach einiger Bemühung das aktuelle Layout der Validierung arbeitet ..... vielen Dank :) –

Verwandte Themen