2016-05-05 7 views
0

Innerhalb meiner Anwendung versuche ich eine verschachtelte Ressource zu erstellen (ein Schritt für ein bestimmtes Ziel) und ich habe Probleme mit der Erstellung an der URL "/ goals/1/steps/new". Wenn ich zu dieser Seite navigiere, erhalte ich den Fehler "Erstes Argument im Formular kann kein Nil enthalten oder leer sein""Das erste Argument in der Form kann nicht nil enthalten oder leer sein" beim Erstellen einer verschachtelten Ressource in ruby ​​on rails

Ich kann wirklich nicht herausfinden, warum ich nicht in der Lage bin, einen Schritt zu erstellen, den er bei der Erstellung zugewiesen bekommt speziell dafür wurde geschaffen. Jede Hilfe wird sehr geschätzt.

Hier sind meine Schritte Controller und meine Schritte bilden

Steps Controller:

class StepsController < ApplicationController 
     #before_action :set_step, only: [:show, :edit, :update, :destroy] 
     before_filter :authorize 

     # GET /steps 
     # GET /steps.json 
     def index 
     @steps = Goal.find(params[:goal_id]).steps.all 
     end 

     # GET /goals/1/steps/new 
     def new 
     @step = Goal.find(params[:goal_id]).steps.new 
     end 

     # GET /steps/1 
     # GET /steps/1.json 
     def show 
     end 

     # GET /steps/1/edit 
     def edit 
     end 

     def create 
     @step = Goal.find(params[:goal_id]).steps.new(step_params) 

     respond_to do |format| 
      if @step.save 
      format.html { redirect_to @step, notice: 'Step was successfully created.' } 
      format.json { render :show, status: :created, location: @step } 
      else 
      format.html { render :new } 
      format.json { render json: @step.errors, status: :unprocessable_entity } 
      end 
     end 

     redirect_to(goal_steps_url(@goal)) 

     end 

     def update 
     @step.update(step_params) 
     respond_to do |format| 
      if @step.update(step_params) 
      format.html { redirect_to @step, notice: 'Step was successfully updated.' } 
      format.json { render :show, status: :ok, location: @step } 
      else 
      format.html { render :edit } 
      format.json { render json: @step.errors, status: :unprocessable_entity } 
      end 
     end 
     end 

     # POST /steps 
     # POST /steps.json 

     def destroy 
     @step.destroy 
     respond_to do |format| 
      format.html { redirect_to steps_url, notice: 'Step was successfully destroyed.' } 
      format.json { head :no_content } 
     end 
     end 

     private 

     def set_step 
      @step = Goal.find(params[:goal_id]).Step.find(params[:id]) 
     end 

     def step_params 
      params.require(:step).permit(:requirement, :completionTime, :goal_id) 
     end 

     end 

Steps Form:

<%= form_for(@steps) do |f| %> 
    <% if @step.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@step.errors.count, "error") %> prohibited this step from being saved:</h2> 

     <ul> 
     <% @step.errors.full_messages.each do |message| %> 
     <li><%= message %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

    <div class="field"> 
    <%= f.label :requirement %><br> 
    <%= f.text_field :requirement %> 
    </div> 
    <div class="field"> 
    <%= f.label :completionTime %><br> 
    <%= f.number_field :completionTime %> 
    </div> 
    <div class="field"> 
    <%= hidden_field_tag :goal_id, goal.id %> 
    </div> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

Routen-Datei:

Rails.application.routes.draw do 

    resources :goals do 
    resources :steps 
    end 

    resources :signups 
    get 'welcome/index' 

    resources :calendar 

    resources :todolist 

    resources :to_dos 

    root 'welcome#index' 

    # These routes will be for signup. The first renders a form in the browse, the second will 
    # receive the form and create a user in our database using the data given to us by the user. 
    get '/login' => 'sessions#new' 
    post '/login' => 'sessions#create' 
    get '/logout' => 'sessions#destroy' 

    get '/signup' => 'users#new' 
    post '/users' => 'users#create' 
end 

Stack-Trace:

actionview (4.2.5.1) lib/action_view/helpers/form_helper.rb:432:in `form_for' 
app/views/steps/_form.html.erb:1:in `_app_views_steps__form_html_erb__4323915558924223187_70260809990920' 
actionview (4.2.5.1) lib/action_view/template.rb:145:in `block in render' 
activesupport (4.2.5.1) lib/active_support/notifications.rb:166:in `instrument' 
actionview (4.2.5.1) lib/action_view/template.rb:333:in `instrument' 
actionview (4.2.5.1) lib/action_view/template.rb:143:in `render' 
actionview (4.2.5.1) lib/action_view/renderer/partial_renderer.rb:339:in `render_partial' 
actionview (4.2.5.1) lib/action_view/renderer/partial_renderer.rb:310:in `block in render' 
actionview (4.2.5.1) lib/action_view/renderer/abstract_renderer.rb:39:in `block in instrument' 
activesupport (4.2.5.1) lib/active_support/notifications.rb:164:in `block in instrument' 
activesupport (4.2.5.1) lib/active_support/notifications/instrumenter.rb:20:in `instrument' 
activesupport (4.2.5.1) lib/active_support/notifications.rb:164:in `instrument' 
actionview (4.2.5.1) lib/action_view/renderer/abstract_renderer.rb:39:in `instrument' 
actionview (4.2.5.1) lib/action_view/renderer/partial_renderer.rb:309:in `render' 
actionview (4.2.5.1) lib/action_view/renderer/renderer.rb:47:in `render_partial' 
actionview (4.2.5.1) lib/action_view/helpers/rendering_helper.rb:35:in `render' 
app/views/steps/new.html.erb:3:in `_app_views_steps_new_html_erb__538834525682328601_70260798181140' 
actionview (4.2.5.1) lib/action_view/template.rb:145:in `block in render' 
activesupport (4.2.5.1) lib/active_support/notifications.rb:166:in `instrument' 
actionview (4.2.5.1) lib/action_view/template.rb:333:in `instrument' 
actionview (4.2.5.1) lib/action_view/template.rb:143:in `render' 
actionview (4.2.5.1) lib/action_view/renderer/template_renderer.rb:54:in `block (2 levels) in render_template' 
actionview (4.2.5.1) lib/action_view/renderer/abstract_renderer.rb:39:in `block in instrument' 
activesupport (4.2.5.1) lib/active_support/notifications.rb:164:in `block in instrument' 
activesupport (4.2.5.1) lib/active_support/notifications/instrumenter.rb:20:in `instrument' 
activesupport (4.2.5.1) lib/active_support/notifications.rb:164:in `instrument' 
actionview (4.2.5.1) lib/action_view/renderer/abstract_renderer.rb:39:in `instrument' 
actionview (4.2.5.1) lib/action_view/renderer/template_renderer.rb:53:in `block in render_template' 
actionview (4.2.5.1) lib/action_view/renderer/template_renderer.rb:61:in `render_with_layout' 
actionview (4.2.5.1) lib/action_view/renderer/template_renderer.rb:52:in `render_template' 
actionview (4.2.5.1) lib/action_view/renderer/template_renderer.rb:14:in `render' 
actionview (4.2.5.1) lib/action_view/renderer/renderer.rb:42:in `render_template' 
actionview (4.2.5.1) lib/action_view/renderer/renderer.rb:23:in `render' 
actionview (4.2.5.1) lib/action_view/rendering.rb:100:in `_render_template' 
actionpack (4.2.5.1) lib/action_controller/metal/streaming.rb:217:in `_render_template' 
actionview (4.2.5.1) lib/action_view/rendering.rb:83:in `render_to_body' 
actionpack (4.2.5.1) lib/action_controller/metal/rendering.rb:32:in `render_to_body' 
actionpack (4.2.5.1) lib/action_controller/metal/renderers.rb:37:in `render_to_body' 
actionpack (4.2.5.1) lib/abstract_controller/rendering.rb:25:in `render' 
actionpack (4.2.5.1) lib/action_controller/metal/rendering.rb:16:in `render' 
actionpack (4.2.5.1) lib/action_controller/metal/instrumentation.rb:44:in `block (2 levels) in render' 
activesupport (4.2.5.1) lib/active_support/core_ext/benchmark.rb:12:in `block in ms' 
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/benchmark.rb:296:in `realtime' 
activesupport (4.2.5.1) lib/active_support/core_ext/benchmark.rb:12:in `ms' 
actionpack (4.2.5.1) lib/action_controller/metal/instrumentation.rb:44:in `block in render' 
actionpack (4.2.5.1) lib/action_controller/metal/instrumentation.rb:87:in `cleanup_view_runtime' 
activerecord (4.2.5.1) lib/active_record/railties/controller_runtime.rb:25:in `cleanup_view_runtime' 
actionpack (4.2.5.1) lib/action_controller/metal/instrumentation.rb:43:in `render' 
actionpack (4.2.5.1) lib/action_controller/metal/implicit_render.rb:10:in `default_render' 
actionpack (4.2.5.1) lib/action_controller/metal/implicit_render.rb:5:in `send_action' 
actionpack (4.2.5.1) lib/abstract_controller/base.rb:198:in `process_action' 
actionpack (4.2.5.1) lib/action_controller/metal/rendering.rb:10:in `process_action' 
actionpack (4.2.5.1) lib/abstract_controller/callbacks.rb:20:in `block in process_action' 
activesupport (4.2.5.1) lib/active_support/callbacks.rb:117:in `call' 
activesupport (4.2.5.1) lib/active_support/callbacks.rb:117:in `call' 
activesupport (4.2.5.1) lib/active_support/callbacks.rb:555:in `block (2 levels) in compile' 
activesupport (4.2.5.1) lib/active_support/callbacks.rb:505:in `call' 
activesupport (4.2.5.1) lib/active_support/callbacks.rb:505:in `call' 
activesupport (4.2.5.1) lib/active_support/callbacks.rb:92:in `__run_callbacks__' 
activesupport (4.2.5.1) lib/active_support/callbacks.rb:778:in `_run_process_action_callbacks' 
activesupport (4.2.5.1) lib/active_support/callbacks.rb:81:in `run_callbacks' 
actionpack (4.2.5.1) lib/abstract_controller/callbacks.rb:19:in `process_action' 
actionpack (4.2.5.1) lib/action_controller/metal/rescue.rb:29:in `process_action' 
actionpack (4.2.5.1) lib/action_controller/metal/instrumentation.rb:32:in `block in process_action' 
activesupport (4.2.5.1) lib/active_support/notifications.rb:164:in `block in instrument' 
activesupport (4.2.5.1) lib/active_support/notifications/instrumenter.rb:20:in `instrument' 
activesupport (4.2.5.1) lib/active_support/notifications.rb:164:in `instrument' 
actionpack (4.2.5.1) lib/action_controller/metal/instrumentation.rb:30:in `process_action' 
actionpack (4.2.5.1) lib/action_controller/metal/params_wrapper.rb:250:in `process_action' 
activerecord (4.2.5.1) lib/active_record/railties/controller_runtime.rb:18:in `process_action' 
actionpack (4.2.5.1) lib/abstract_controller/base.rb:137:in `process' 
actionview (4.2.5.1) lib/action_view/rendering.rb:30:in `process' 
actionpack (4.2.5.1) lib/action_controller/metal.rb:196:in `dispatch' 
actionpack (4.2.5.1) lib/action_controller/metal/rack_delegation.rb:13:in `dispatch' 
actionpack (4.2.5.1) lib/action_controller/metal.rb:237:in `block in action' 
actionpack (4.2.5.1) lib/action_dispatch/routing/route_set.rb:74:in `call' 
actionpack (4.2.5.1) lib/action_dispatch/routing/route_set.rb:74:in `dispatch' 
actionpack (4.2.5.1) lib/action_dispatch/routing/route_set.rb:43:in `serve' 
actionpack (4.2.5.1) lib/action_dispatch/journey/router.rb:43:in `block in serve' 
actionpack (4.2.5.1) lib/action_dispatch/journey/router.rb:30:in `each' 
actionpack (4.2.5.1) lib/action_dispatch/journey/router.rb:30:in `serve' 
actionpack (4.2.5.1) lib/action_dispatch/routing/route_set.rb:815:in `call' 
rack (1.6.4) lib/rack/etag.rb:24:in `call' 
rack (1.6.4) lib/rack/conditionalget.rb:25:in `call' 
rack (1.6.4) lib/rack/head.rb:13:in `call' 
actionpack (4.2.5.1) lib/action_dispatch/middleware/params_parser.rb:27:in `call' 
actionpack (4.2.5.1) lib/action_dispatch/middleware/flash.rb:260:in `call' 
rack (1.6.4) lib/rack/session/abstract/id.rb:225:in `context' 
rack (1.6.4) lib/rack/session/abstract/id.rb:220:in `call' 
actionpack (4.2.5.1) lib/action_dispatch/middleware/cookies.rb:560:in `call' 
activerecord (4.2.5.1) lib/active_record/query_cache.rb:36:in `call' 
activerecord (4.2.5.1) lib/active_record/connection_adapters/abstract/connection_pool.rb:653:in `call' 
activerecord (4.2.5.1) lib/active_record/migration.rb:377:in `call' 
actionpack (4.2.5.1) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call' 
activesupport (4.2.5.1) lib/active_support/callbacks.rb:88:in `__run_callbacks__' 
activesupport (4.2.5.1) lib/active_support/callbacks.rb:778:in `_run_call_callbacks' 
activesupport (4.2.5.1) lib/active_support/callbacks.rb:81:in `run_callbacks' 
actionpack (4.2.5.1) lib/action_dispatch/middleware/callbacks.rb:27:in `call' 
actionpack (4.2.5.1) lib/action_dispatch/middleware/reloader.rb:73:in `call' 
actionpack (4.2.5.1) lib/action_dispatch/middleware/remote_ip.rb:78:in `call' 
actionpack (4.2.5.1) lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call' 
web-console (2.3.0) lib/web_console/middleware.rb:28:in `block in call' 
web-console (2.3.0) lib/web_console/middleware.rb:18:in `catch' 
web-console (2.3.0) lib/web_console/middleware.rb:18:in `call' 
actionpack (4.2.5.1) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call' 
railties (4.2.5.1) lib/rails/rack/logger.rb:38:in `call_app' 
railties (4.2.5.1) lib/rails/rack/logger.rb:20:in `block in call' 
activesupport (4.2.5.1) lib/active_support/tagged_logging.rb:68:in `block in tagged' 
activesupport (4.2.5.1) lib/active_support/tagged_logging.rb:26:in `tagged' 
activesupport (4.2.5.1) lib/active_support/tagged_logging.rb:68:in `tagged' 
railties (4.2.5.1) lib/rails/rack/logger.rb:20:in `call' 
actionpack (4.2.5.1) lib/action_dispatch/middleware/request_id.rb:21:in `call' 
rack (1.6.4) lib/rack/methodoverride.rb:22:in `call' 
rack (1.6.4) lib/rack/runtime.rb:18:in `call' 
activesupport (4.2.5.1) lib/active_support/cache/strategy/local_cache_middleware.rb:28:in `call' 
rack (1.6.4) lib/rack/lock.rb:17:in `call' 
actionpack (4.2.5.1) lib/action_dispatch/middleware/static.rb:116:in `call' 
rack (1.6.4) lib/rack/sendfile.rb:113:in `call' 
railties (4.2.5.1) lib/rails/engine.rb:518:in `call' 
railties (4.2.5.1) lib/rails/application.rb:165:in `call' 
rack (1.6.4) lib/rack/lock.rb:17:in `call' 
rack (1.6.4) lib/rack/content_length.rb:15:in `call' 
rack (1.6.4) lib/rack/handler/webrick.rb:88:in `service' 
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/webrick/httpserver.rb:138:in `service' 
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/webrick/httpserver.rb:94:in `run' 
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/webrick/server.rb:295:in `block in start_thread' 
+0

fügen Sie die Routen und Stack-Trace erhalten würde. –

+0

@ShamsulHaque hinzugefügt diese in einer Bearbeitung. – Frenchy

+0

'<% = form_for (@steps) do | f | %> 'das ist, wo Sie den Fehler bekommen von .. versuchen Sie mit' @ step' – sa77

Antwort

0

In Controller: -

def new 
    @goal = Goal.find(params[:goal_id]) 
    @step = @goal.steps.build 
    end 

    def edit 
    @goal = Goal.find(params[:goal_id]) 
    end 

    def create 
    @goal = Goal.find(params[:goal_id]) 
    @step = @goal.steps.new(step_params) 

    respond_to do |format| 
     if @step.save 
     format.html { redirect_to goal_steps_path(@goal), notice: 'Step was successfully created.' } 
     format.json { render :show, status: :created, location: @step } 
     else 
     format.html { render :new } 
     format.json { render json: @step.errors, status: :unprocessable_entity } 
     end 
    end 

    redirect_to(goal_steps_url(@goal)) 

    end 

    def update 
    @goal = Goal.find(params[:goal_id]) 
    @step.update(step_params) 
    respond_to do |format| 
     if @step.update(step_params) 
     format.html { redirect_to goal_steps_path(@goal), notice: 'Step was successfully updated.' } 
     format.json { render :show, status: :ok, location: @step } 
     else 
     format.html { render :edit } 
     format.json { render json: @step.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

In der Form: -

Ersetzen Sie die Zeile

<%= form_for(@steps) do |f| %> 

mit

<%= form_for[@goal,@step] do |f| %> 
+0

Es gibt mir jetzt den Fehler "undefined Methode' steps_path '"für diese genaue Zeile. – Frenchy

+0

Ich habe den Beitrag aktualisiert. –

0

Erstes Argument in Form enthält, kann nicht gleich Null oder

Zunächst leer sein, die Fehler aufgrund Ihrer Form @steps statt @step mit und auch ein Formular für verschachtelte Ressourcen Sie erstellen, so dass Ihre form_for benötigt zwei Argumente. Die folgenden Änderungen sollten Sie

def new 
    @goal = Goal.find(params[:goal_id]) 
    @step = @goal.steps.build 
end 

und in der Form, ändern

<%= form_for(@steps) do |f| %> 

zu

<%= form_for [@goal, @step] do |f| %> 
+0

Das hat endlich funktioniert! Vielen Dank, ich bin seit ein paar Tagen ratlos. Was für eine Erleichterung: D – Frenchy