2010-04-26 5 views
12

Hoffentlich kann ich erklären, das gut genug, aber lassen Sie es mich wissen, wenn mehr Informationen benötigt werden!Filterkette gestoppt wie [: login_required] rendered_or_redirected

Ich baue ein Formular, in dem ein Benutzer einen „Vorfall“ schaffen. Dieser Vorfall hat die folgenden Beziehungen:

  • belongs_to: Kunden (Kunden has_many Vorfälle)
  • belongs_to: Benutzer (User has_many Vorfälle)
  • has_one: incident_status (incident_status zu Vorfall gehört)

Das Formular ermöglicht es dem Benutzer, den Vorfall einem Benutzer zuzuweisen (Formular auswählen) und dann einen Vorfallsstatus auszuwählen. Der Vorfall ist im Kunden verschachtelt.

Aber ich bin immer die folgend in den Server-Logs:

Processing IncidentsController#create (for 127.0.0.1 at 2010-04-26 10:41:33) [POST] 
Parameters: {"commit"=>"Create", "action"=>"create", 
"authenticity_token"=>"YhW++vd/dnLoNV/DSl1DULcaWq/RwP7jvLOVx9jQblA=", 
"customer_id"=>"4", "controller"=>"incidents", "incident"=>{"title"=>"Some Bad Incident", 
"incident_status_id"=>"1", "user_id"=>"2", "other_name"=>"SS01-042310-001"}} 

User Load (0.3ms) SELECT * FROM "users" WHERE ("users"."id" = 2) LIMIT 1 
Redirected to http://localhost:3000/session/new 
Filter chain halted as [:login_required] rendered_or_redirected. 
Completed in 55ms (DB: 0) | 302 Found [http://localhost/customers/4/incidents] 

Es scheint mir, wie es versucht, Informationen über den Benutzer zu sammeln, auch wenn es bereits die ID hat (was es ist alles muss der Vorfall erstellt werden), und der Benutzer ist möglicherweise nicht berechtigt, eine Select-Anweisung wie diese auszuführen? Ich bin ziemlich verwirrt.

Hier sind die relevanten (glaube ich) Informationen im Incident-Controller.

before_filter :login_required, :get_customer 

def new 
    @incident = @customer.incidents.build 
    @users = @customer.users 
    @statuses = IncidentStatus.find(:all) 

    respond_to do |format| 
    format.html # new.html.erb 
    format.xml { render :xml => @incident } 
    end 
end 

def create 
    @incident = @customer.incidents.build(params[:incident]) 

    respond_to do |format| 
    if @incident.save 
     flash[:notice] = 'Incident was successfully created.' 
     format.html { redirect_to(@incident) } 
     format.xml { render :xml => @incident, :status => :created, :location => @incident } 
    else 
     format.html { render :action => "new" } 
     format.xml { render :xml => @incident.errors, :status => :unprocessable_entity } 
    end 
    end 
end 

Nur als ein FYI verwende ich das restful_authentication plugin.

Also zusammenfassend, wenn ich den Vorfall Schöpfung Form einreichen, es nicht den Vorfall sparen, weil es anhält. Ich bin noch sehr neu in den Schienen, so dass meine Fähigkeit, solche Probleme zu diagnostizieren, immer noch sehr schlecht ist. Ich gehe im Kreis. :)

Vielen Dank im Voraus für jede Hilfe. Bitte lassen Sie mich wissen, wenn mehr Informationen benötigt werden und ich werde es bearbeiten!

Antwort

17

Verwenden Sie einfach in Ihrem Controller folgen.

before_filter :login_required, :except=>[:new, :create] 
+0

Danke. Das hat den Trick gemacht! – Magicked

6

Oder Sie können diesen Filter überspringen:

skip_before_filter :login_required, only: [:new, :create] 
+0

unter geschätzter, semantisch genauer Brillanz – am17torres