2010-04-26 13 views
12

Espero que pueda explicar esto lo suficiente, pero dígame si necesita más información.Cadena de filtro detenida como [: login_required] rendered_or_redirected

Estoy creando un formulario donde un usuario puede crear un "incidente". Este incidente tiene las siguientes relaciones:

  • belongs_to: cliente (incidentes has_many cliente)
  • belongs_to: usuario (incidentes has_many usuario)
  • has_one: incident_status (incident_status pertenece al incidente)

El formulario permite al usuario asignar el incidente a un usuario (seleccionar formulario) y luego seleccionar un estado de incidente. El incidente está anidado en el cliente.

Sin embargo, yo estoy haciendo lo siguiente en los registros del servidor:

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] 

Se me parece que está tratando de recopilar información sobre el usuario, a pesar de que ya tiene el id (que es todo lo necesita crear el incidente), y el usuario puede no tener permiso para hacer una declaración de selección como esa? Estoy bastante confundido.

Aquí está la información relevante (creo) en el controlador del incidente.

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 

Solo como un FYI, estoy usando el complemento restful_authentication.

Por lo tanto, en resumen, cuando envío el formulario de creación de incidente, no guarda el incidente porque se detiene. Todavía soy muy nuevo en los rieles, por lo que mi habilidad para diagnosticar problemas como este sigue siendo muy mala. Voy en círculos :)

Gracias de antemano por cualquier ayuda. Por favor, avíseme si se necesita más información y la voy a editar!

Respuesta

17

Solo tiene que seguir en su controlador.

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

Gracias. Eso hizo el truco! – Magicked

6

O puede omitir este filtro:

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

bajo apreciado brillo semánticamente preciso – am17torres

Cuestiones relacionadas