2017-12-03 24 views
0

Ich habe ein kleines Problem, um herauszufinden, wo dieser Fehler herkommt.noMethodError in Eigenschaft # neu

Ich erhalte diese Fehlermeldung:

enter image description here

Ich bin nicht sicher, es ist das Problem hat mit der Benennung von meinem Ordner in Ansichten zu tun, nannte ich es Eigentum ... anstelle von Eigenschaften (ich habe bereits versucht, es zu ändern, aber ich bekomme immer noch einen Fehler)

enter image description here

Dies ist, was mein Modell sieht aus wie

class Property < ApplicationRecord 
    validates :address, presence: true, length: {minimum: 10} 
    validates :price, presence: true 
    validates :description, presence: true 
    validates :bedrooms, presence: true 
    validates :bathrooms, presence: true 
    validates :type, presence: true 
    validates :sqft, presence: true 
    validates :lot, presence: true 
    validates :year_built, presence: true 
end 

und dies ist mein Controller:

property_controller.rb

class PropertyController < ApplicationController 
    def index 
    @properties = Property.all 
    end 

    def new 
    @property = Property.new 
    end 

    def create 
    @property = Property.new(property_params) 
    if @property.save? 
     flash[:notice] = 'Property was successufully created.' 
     redirect_to property_path(@property) 
    else 
     render :new 
    end 
    end 

    private 
    def property_params 
    params.require(:property).permit(:address, :price, :description, 
:bedrooms, :bathrooms, :type, :sqft, :lot, :year_built) 
    end 
end 

und meine Ansicht Datei

_form.html.erb 
    <% if @property.errors.any? %> 
     <h3>The following errors prevented the addition of this property. 
     </h3> 
     <ul> 


    <% @property.errors.full_messages.each do |msg| %> 
      <li><%= msg %></li> 
     <% end %> 
     </ul> 
    <% end %> 

    <%= form_for @property do |f| %> 
     <div class="form-group"> 
     <%= f.text_field :address, required: true, placeholder: "Address", 
    class: "form-control"%> 
     </div> 
     <div class="form-group"> 
     <%= f.text_field :price, required: true, placeholder: "Price", 
    class: "form-control"%> 
     </div> 
     <div class="form-group"> 
     <%= f.text_area :description, required: true, placeholder: 
    "Description", class: "form-control"%> 
     </div> 
     <div class="form-group"> 
     <%= f.button :submit, class: "btn btn-success" %> 
     </div> 
    <% end %> 

new.html.erb 

    <h3>Add new Property:</h3> 

    <%#= render 'form' %> 

Es scheint, dass der Fehler mit der Form ist, denn wenn ich den Kommentar formout, die new.html.erb zeigt gut an. Jede Hilfe würde es schätzen.

harken routen | grep Eigenschaft

enter image description here

+0

könnten Sie bitte 'rake routes | hinzufügen Grep Eigentum? – rony36

+0

sicher, ich habe ein Bild oben hinzugefügt, weil es zu lange für eine Antwort hier war. – Lucky500

Antwort

1

Wenn Sie eine form_for, ohne explizit die Definition der url erklären, Rails wird erraten, welchen Weg Sie wollen. In Ihrem Fall, da @property eine neue Instanz ist (nicht belegt), will Rails POST an die properties_path. Dies ist einfach Rails-Konvention.

Ihre wahrscheinlichste Lösung ist nur resources :properties zu Ihrer routes.rb Datei hinzuzufügen. Wenn Sie Ihre Datei einfügen, können wir Ihnen ein wenig mehr Informationen darüber geben, warum dies notwendig ist.

UPDATE

Rails erwartet Tabellennamen (und damit Routen) die plurale Version den Namen Ihres Modells sein. So hat Ihr Property Modell eine properties Tabelle und Route. Using resources :properties (Plural) folgt Rails-Konventionen und lassen Sie uns alles gut zusammen arbeiten.

+0

Hey XML, ich habe es auf meinem routes.rb gesetzt Rails.application.routes.draw tun devise_for: Benutzer Ressourcen: welcome root Ressourcen '# Index begrüßen': Immobilien Ende – Lucky500

+0

ändern 'Ressourcen: property' to 'resources: properties' –

+0

, die mir scheinbar eine ganze Reihe neuer Fehler geben ... Keine Route stimmt überein [GET]"/property/new "... Ich gehe davon aus, dass ich Links ändern müsste und was nicht. Ich könnte es versuchen. – Lucky500