2017-01-23 18 views
0

Ich habe ein Front-End-Projekt in die Rails-Umgebung konvertiert, und ich habe Material Design Lite verwendet, um die Formularfelder zu entwerfen. Ich erhalte die folgende Fehlermeldung:Schienen - NoMethodError in Home # neu

NoMethodError Startseite # new - nicht definierte Methode `homes_path‘

Kann mir jemand helfen, den Fehler zu beheben?

routes.rb:

Rails.application.routes.draw do 
    # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html 
    get '/home', to: 'home#index' 
    get '/home/new', to: 'home#new' 
    get 'home/:id', to: 'home#show' 
end 

new.html.erb:

<div class="container-div"> 
    <!-- Colored FAB button with ripple --> 
    <button id="fab" class="mdl-button mdl-js-button mdl-button--fab mdl-js-ripple-effect mdl-button--colored"> 
    <i class="material-icons">add</i> 
    </button> 

    <div class="demo-card-wide mdl-card mdl-shadow--2dp"> 
    <div class="mdl-card__title" id="text-div"> 
     <h2 id="title-text" class="mdl-card__title-text">CAMPAIGN</h2> 
     <br> 
     <br> 
     <span id="success">Success!</span> 
    </div> 
    <div class="mdl-card__supporting-text"> 

     <%= form_for(@home) do |f| %> 
      <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label"> 
      <%= f.text_field_tag :campaign_name,nil,:class => "mdl-textfield__input"%> 
      <label class="mdl-textfield__label" for="campaign_name">Campaign Name</label> 
      </div> 

      <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label"> 
      <%= f.text_field_tag :phone_number_receiver,nil,:class => "mdl-textfield__input",:type => "number" %> 
      <label class="mdl-textfield__label" for="phone_number_receiver">Phone Number for recipient</label> 
      <span class="mdl-textfield__error">Input is not a number!</span> 
      </div> 

      <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label"> 
      <%= f.text_field_tag :start_date,nil,:class => "mdl-textfield__input"%> 
      <label class="mdl-textfield__label" for="start_date" id="start-date-label">Enter start date</label> 
      </div> 


      <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label"> 
      <%= f.text_field_tag :end_date,nil,:class => "mdl-textfield__input"%> 
      <label class="mdl-textfield__label" for="end_date" id="end-date-label">Enter end date</label> 
      </div> 

      <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label"> 
      <%= f.text_field_tag :start_time,nil,:class => "mdl-textfield__input"%> 
      <label class="mdl-textfield__label" for="start_time" id="start-time-label">Enter time</label> 
      </div> 

      <div class="mdl-textfield mdl-js-textfield less-margin mdl-textfield--floating-label"> 
      <%= f.text_area_tag :sms_msg, nil,:class => "mdl-textfield__input", :rows => 8, :cols => 40 %> 
      <label class="mdl-textfield__label" for="sms_msg">Text Message</label> 

      </div> 

      <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label"> 
      <%= text_field_tag :break_msg,"1",:class => "mdl-textfield__input"%> 
      <label class="mdl-textfield__label" for="break_msg">Number of Pages</label> 
      </div> 
     <%end%> 


    </div> 
    </div> 
</div> 

home_controller.rb:

class HomeController < ApplicationController 
    def index 
    @campaigns = Home.all 
    end 

    def new 
    @home = Home.new 
    end 

    def show 
    @campaign = Home.find(params[:id]) 
    end 
end 

PS: Das Formularfeld für: break_msg ist kein Teil des Modells Startseite.

Link zu GitHub: https://github.com/rimildeyjsr/sms-scheduler

+0

AFAICT gibt es keinen 'homes_path', nur einen' home_path', nein? Führen Sie einfach "Rake-Routen" aus. –

+0

Nein, es gibt keinen homes_path. Ich habe den Befehl ausgeführt, es gibt keinen solchen Pfad –

Antwort

1

Sieht aus wie Ihre Form auf eine Route zeigen wird (homes_path oder /homes), die nicht existiert. Sie müssen eine POST Route und die entsprechende Controller-Aktion erstellen.

post '/home', to: 'home#create', as: :homes 

Denken Sie daran, kann der as: :homes optional sein. Führen Sie rake routes zur Überprüfung aus.

Und für die Controller-Aktion, so etwas wie diese:

def create 
    @home = Home.create(home_params) 
    ... 
end 

Für mehr Informationen, die Rails docs on controllers überprüfen.

EDIT: Auch Sie verwenden text_field_tag und text_area_tag in Ihrer Form, aber da Sie ein Active Objekt verwenden (@home), dann brauchen Sie nicht die _tag. Also, nur f.text_field und f.text_area.

Schließlich sollten Sie den resources Helfer verwenden, anstatt die "Heim" -Routen manuell zu erstellen. Lesen Sie die Rails docs on routing für weitere Informationen und Anpassungsoptionen (z. B. erhalten /home anstelle von /homes bei Verwendung resources :homes).

+0

Ich fügte den Code, den Sie mich gefragt haben, ohne die als:: Häuser. Ich bekomme wieder den gleichen Fehler –

+0

Haben Sie die 'create' Aktion hinzugefügt? Versuchen Sie es auch mit 'as:: homes'. – mmichael

+0

Ja, ich habe die create-Aktion hinzugefügt.Versuchen Sie es mit als:: Heime gibt diesen Fehler - undefined Methode 'text_field_tag ​​'für #

1

dieses Problem scheint ähnlich einer Frage, die ich vorher hatte: undefined method `wikis_path'

versuchen Ihren Controller homes_controller.rb umbenennen. Dies erzeugt eine Reihe von Fehlern, die Sie bereinigen müssen (z. B. das Ändern von class HomeController < ApplicationController zu class HomesController < ApplicationController sowie das Korrigieren Ihrer Routen). Dies sollte das Problem angehen, die Route homes_path nicht zu haben.