2016-11-25 2 views
0

Ich richte Formular ein, um neue Daten hinzuzufügen, aber ich habe diesen Fehler undefined method Stickereien' für nil: NilClass.' Ich folgte die Schienen Anleitung dafür aber Ich habe keine Ahnung, wie ich meinen Code korrigieren kann.undefined Methode `embroideries 'für nil: NilClass für submit create form

Hier ist mein Controller.

class EmbroderiesController < ApplicationController 
    def index 
    end 

    def show 
    @embroderies = Embrodery.find(params[:id]) 
    end 

    def new 
    @embrodery = Embrodery.new 
    end 

    def create 
    @region = Region.find(params[:region_id]) 
    @embrodery = @region.embroderies.create(comment_params) 

    if @embrodery.save 
     redirect_to @embrodery 
    else 
     render 'new' 
    end 
    end 

    private 
    def embrodery_params 
    params.require(:embrodery).permit(:name, :image) 
    end 
end 

Der Blick

<div class = "container"> 
    <div class = "row"> 
    <div class = "col-xs-12 add-wrap-div"> 
     <p>Add new model</p> 
     <%= form_for ([@region, @region.embroderies.build]) do |f| %> 
     <p> 
      <%= f.label :name %><br> 
      <%= f.text_field :name %> 
     </p> 

     <p> 
      <%= f.label :image %><br> 
      <%= f.file_field :image %> 
     </p> 
     <br> 
     <br> 
     <p> 
      <%= f.submit %> 
     </p> 
     <% end %> 
    </div> 
    </div> 
</div> 

und die Routen

   Prefix Verb URI Pattern          Controller#Action 
       root GET /            home#index 
      home_index GET /home/index(.:format)        home#index 
      home_about GET /home/about(.:format)        home#about 
    region_embroderies GET /regions/:region_id/embroderies(.:format)   embroderies#index 
         POST /regions/:region_id/embroderies(.:format)   embroderies#create 
new_region_embrodery GET /regions/:region_id/embroderies/new(.:format)  embroderies#new 
edit_region_embrodery GET /regions/:region_id/embroderies/:id/edit(.:format) embroderies#edit 
    region_embrodery GET /regions/:region_id/embroderies/:id(.:format)  embroderies#show 
         PATCH /regions/:region_id/embroderies/:id(.:format)  embroderies#update 
         PUT /regions/:region_id/embroderies/:id(.:format)  embroderies#update 
         DELETE /regions/:region_id/embroderies/:id(.:format)  embroderies#destroy 
       regions GET /regions(.:format)         regions#index 
         POST /regions(.:format)         regions#create 
      new_region GET /regions/new(.:format)        regions#new 
      edit_region GET /regions/:id/edit(.:format)      regions#edit 
       region GET /regions/:id(.:format)        regions#show 
         PATCH /regions/:id(.:format)        regions#update 
         PUT /regions/:id(.:format)        regions#update 
         DELETE /regions/:id(.:format)        regions#destroy 

Schema

ActiveRecord::Schema.define(version: 20161115165517) do 

    # These are extensions that must be enabled in order to support this database 
    enable_extension "plpgsql" 

    create_table "embroderies", force: :cascade do |t| 
    t.string "name" 
    t.string "image" 
    t.integer "region_id" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    end 

    add_index "embroderies", ["region_id"], name: "index_embroderies_on_region_id", using: :btree 

    create_table "regions", force: :cascade do |t| 
    t.string "name" 
    t.string "image" 
    t.text  "description" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    end 

    add_foreign_key "embroderies", "regions" 
end 
+0

fügen Sie bitte auch Ihre Db-Schema – Fallenhero

+0

@Jagdeep Singh bereits richtig beantwortet – Fallenhero

+0

@Glory die Antwort –

Antwort

1

In Ihrem new Aktion, die Sie benötigen zu finden Region auch.

def new 
    @region = Region.find(params[:region_id]) 
end 
+0

Ich tat es, wie Sie gesagt, aber ich habe den Fehler nicht finden konnte Region mit ‚id‘ = region_id – Lory

+0

was ist die URL Sie verwenden 'new' Seite zu besuchen? –

+0

@Glory Sie müssen new_region_embrodery_path (@region) verwenden, um diese Seite zu besuchen –

0
def new 
    @region = Region.find(params[:region_id]) 
    end 

Sie haben Region intialize hier mit Region-ID

keine Notwendigkeit, Embrodery.new zu tun beacuse Ihr bereits das Objekt in Form bauen, die @ region.embroderies.build

ist
+0

@Glory Sie verwenden müssen new_region_embrodery_path (@region) zu Besuchen Sie diese Seite –

+0

Ich habe es funktioniert, aber ich habe immer noch den gleichen Fehler undefinierte Methode 'Embroideries' in create action. – Lory

+0

Sie fixiert ein wenig, nun in create-Methode nur setzen byebug und params überprüfen und lassen Sie mich wissen, was sind die –

0

Dies ist nach byebug:

Started POST "/regions/4/embroderies" for 127.0.0.1 at 2016-11-25 11:53:21 +0100 
Processing by EmbroderiesController#create as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"v+Jt8r4ICItLjnVtNV65i49T/nxddXTt9D2An6n74wHl1WOjbPafapvEQFoRyTVALKbD8xg/z1SDJVdcMU2NqQ==", "embrodery"=>{"name"=>"gggg", "image"=>#<ActionDispatch::Http::UploadedFile:0x007f322109b6b8 @tempfile=#<Tempfile:/tmp/RackMultipart20161125-13725-1sul86f.png>, @original_filename="Screenshot from 2016-06-17 12-30-42.png", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"embrodery[image]\"; filename=\"Screenshot from 2016-06-17 12-30-42.png\"\r\nContent-Type: image/png\r\n">}, "commit"=>"Create Embrodery", "region_id"=>"4"} 

[11, 20] in /home/glory/Projects/vezba-app/app/controllers/embroderies_controller.rb 
    11:  @embrodery = Embrodery.new 
    12: end 
    13: 
    14: def create 
    15:  byebug 
=> 16:  @embrodery = @region.embroderies.create(comment_params) 
    17: 
    18:  if @embrodery.save 
    19:  redirect_to @embrodery 
    20:  else 
(byebug) params 
{"utf8"=>"✓", "authenticity_token"=>"v+Jt8r4ICItLjnVtNV65i49T/nxddXTt9D2An6n74wHl1WOjbPafapvEQFoRyTVALKbD8xg/z1SDJVdcMU2NqQ==", "embrodery"=>{"name"=>"gggg", "image"=>#<ActionDispatch::Http::UploadedFile:0x007f322109b6b8 @tempfile=#<Tempfile:/tmp/RackMultipart20161125-13725-1sul86f.png>, @original_filename="Screenshot from 2016-06-17 12-30-42.png", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"embrodery[image]\"; filename=\"Screenshot from 2016-06-17 12-30-42.png\"\r\nContent-Type: image/png\r\n">}, "commit"=>"Create Embrodery", "controller"=>"embroderies", "action"=>"create", "region_id"=>"4"} 
Verwandte Themen