2012-12-12 4 views
-2

J'essaie d'utiliser la classe split pour diviser un tableau. Je continue à obtenir cette erreur:La classe Ruby 'split' ne fonctionne pas

MethodError (undefined method `split' for nil:NilClass): 

C'est ce que je suis en train de faire: créer def

@listing.landlord = current_landlord 
    if @listing.save 
     photo_id_array = params[:images].split(/,/) 
     photo_id_array.each do |image| 
     @image = Photo.find_by_id("photo.id") 
     @image.listing_id = @listing.id 
     end 
     render :show, :status => 200 
    else 
     render :status => 403, :json => {:errors => @listing.errors} 
    end 
    end 

Je suis en cours d'exécution Rails 3.2.9. Des idées sur ce qui pourrait en être la cause?

Edit:

Voici le post complet:

Started POST "/listings" for 127.0.0.1 at 2012-12-12 01:04:52 -0800 
Processing by ListingsController#create as application/json; charset=utf-8 
    Parameters: {"listing"=>{"street_address"=>"123 main st", "city"=>"los angeles", "state"=>"ca", "availability"=>"12 Dec 2012", "price"=>"2000", "period"=>"2", "category"=>"1", "cats"=>"false", "dogs"=>"false", "square_footage"=>"0", "bedrooms"=>"3", "bathrooms"=>"2", "short_description"=>"tree-lined street", "long_description"=>"big yard", "images"=>["70621", "70622", "70620"]}, "auth_token"=>"6489Cn7KeTmejSxaWsws"} 
WARNING: Can't verify CSRF token authenticity 
    User Load (1.6ms) SELECT "users".* FROM "users" WHERE "users"."authentication_token" = '6489Cn7KeTmejSxaWsws' LIMIT 1 
    Landlord Load (0.6ms) SELECT "landlords".* FROM "landlords" WHERE "landlords"."authentication_token" = '6489Cn7KeTmejSxaWsws' LIMIT 1 
    Role Load (0.5ms) SELECT "roles".* FROM "roles" WHERE "roles"."name" = 'admin' LIMIT 1 
    Role Exists (0.7ms) SELECT 1 AS one FROM "roles" INNER JOIN "landlords_roles" ON "roles"."id" = "landlords_roles"."role_id" WHERE "landlords_roles"."landlord_id" = 5867 AND "roles"."id" = 1 LIMIT 1 
Completed 500 Internal Server Error in 275ms 

NoMethodError (undefined method `split' for nil:NilClass): 
    app/controllers/listings_controller.rb:8:in `create' 


    Rendered /Users/rigelstpierre/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.9/lib/action_dispatch/middleware/templates/rescues/_trace.erb (1.9ms) 
    Rendered /Users/rigelstpierre/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.9/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (2.1ms) 
    Rendered /Users/rigelstpierre/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.9/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (16.9ms) 
+5

params [: images] est nul – apneadiving

+0

@apneadiving Il ne ressemble pas à ça. Jetez un oeil à la poste. – rigelstpierre

+0

Comme dit par @apneadiving vous obtenez zéro pour params [: images] et aussi le tableau FYI n'a pas de division de méthode –

Répondre

4

params[:images] est nul, vous êtes après params[:listing][:images] je suppose.

Vos paramètres sont structurés comme suit: "listing"=>{"images"=>["70621", "70622", "70620"]}.

De plus, vous n'avez pas besoin de le diviser, c'est un tableau. Accédez à chaque élément du tableau avec: params[:listing][:images].each do |i|

+0

Puis-je itérer dessus Je veux rechercher chaque élément et lui assigner le listing_id. – rigelstpierre

+0

Oui. Faites-le comme si vous essayiez dans votre message: 'images_array = params [: listing] [: images]; images_array.each faire | i | ... 'ou comme ci-dessus dans mon message. –

6

Utilisation:

params[:listing][:images] 

Et il est déjà un tableau, pas besoin de partager. Vous pouvez directement faire: params[:listing][:images].each.