2016-08-01 56 views
-1

Ich habe stundenlang gesucht, und ich kann anscheinend nichts finden, das mein Problem hier behandelt. Dies könnte für jemanden einfach sein, aber es wäre sehr geschätzt, wenn jemand helfen kann.Edit Problem: Konnte Client mit 'ID' nicht finden =

Ich erstelle eine App, um eine einfache CRUD auf Clients in meiner Datenbank zu erstellen. Index funktioniert gut. Und es ist großartig, jedem Kunden eine ID zu zeigen. Ich sehe alle Details des Kunden. Image example of index in app

Aber mit der Bearbeitungsaktion bekomme ich diesen Fehler im Browser:

ActiveRecord::RecordNotFound in ClientsController#edit 
Couldn't find Client with 'id'= 

Extracted source (around line #30): 

29 def edit 
30 @client = Client.find(params[:id]) 
31 end 
32 
33 def update 

Ich verstehe das nicht, wie ich den gleichen Code in der Eingabe Aktion von der Arbeits Show verwendet habe Aktion:

def show 
    @client = Client.find(params[:id]) 
end 

es scheint, als ob die Anwendung nicht in der Lage zu holen: id Parameter aus meinem Browser und in der Bearbeitungsformular Aktion zu platzieren. Das Problem wird möglicherweise auch in der Aktualisierungsaktion angezeigt. Ich habe versucht, @ client = Client.find (1) einzugeben und es funktioniert. Es gibt mir ein Bearbeitungsformular mit der client_id von 1 im Browser, aber natürlich möchte ich die ID aus dem Browser, wie die Ansicht Aktion funktioniert. Ich vermute also, dass etwas mit meinem Routing nicht stimmt, da die App sowohl den Index als auch die Ansicht versteht, aber nicht, wie die ID an die Bearbeitungsseite weitergeleitet wird.

Dies ist, was mein Weg Datei wie folgt aussieht:

Rails.application.routes.draw do 

    resources :clients 

    match ':controller(/:action(:/id))', :via => [:get, :post] 

end 

Dies ist, was mein edit.html.erb sieht aus wie

<%= link_to("<< Back to List", {:action => 'index'}, :class => 'back-link') %> 

<div class="clients edit"> 
<h2>Update client</h2> 

<%= form_for(:client, :url => {:action => 'update', :id => @client.id}) do |f| %> 

    <table summary="Client form fields"> 
     <tr> 
      <th>Name</th> 
      <td><%= f.text_field(:name) %></td> 
     </tr> 
     <tr> 
      <th>Visible</th> 
      <td><%= f.text_field(:visible) %></td> 
     </tr> 
     <tr> 
      <th>Category</th> 
      <td><%= f.text_field(:category_id) %></td> 
     </tr> 
     <tr> 
      <th>Short description</th> 
      <td><%= f.text_field(:shortdescription) %></td> 
     </tr> 
     <tr> 
      <th>Long description</th> 
      <td><%= f.text_field(:longdescription) %></td> 
     </tr> 
     <tr> 
      <th>Phonenumber</th> 
      <td><%= f.text_field(:phonenumber) %></td> 
     </tr> 
     <tr> 
      <th>Email</th> 
      <td><%= f.text_field(:email) %></td> 
     </tr> 
     <tr> 
      <th>Country</th> 
      <td><%= f.text_field(:country) %></td> 
     </tr> 
     <tr> 
      <th>Lattitude</th> 
      <td><%= f.text_field(:lattitude) %></td> 
     </tr> 
     <tr> 
      <th>Longtitude</th> 
      <td><%= f.text_field(:longtitude) %></td> 
     </tr> 
    </table> 

    <div class="form-buttons"> 
     <%= submit_tag("Update Client") %> 
    </div> 

<% end %> 

Dies ist, was Meine Rake-Routen sehen aus wie

 Prefix Verb  URI Pattern       Controller#Action 
    clients GET  /clients(.:format)      clients#index 
     POST  /clients(.:format)      clients#create 
new_client GET  /clients/new(.:format)     clients#new 
edit_client GET  /clients/:id/edit(.:format)   clients#edit 
client GET  /clients/:id(.:format)     clients#show 
     PATCH /clients/:id(.:format)     clients#update 
     PUT  /clients/:id(.:format)     clients#update 
     DELETE /clients/:id(.:format)     clients#destroy 
    root GET /         clients#index 

Und das ist, was meine clients_controller.rb wie `Klasse ClientsController sieht < Application

def index 
    @clients = Client.order("name ASC") 
end 

def show 
    @client = Client.find(params[:id]) 
end 

def new 
    @client = Client.new({:country => 'DK'}) 
end 

def create 
    @client = Client.new(client_params) 
    if @client.save 
     redirect_to(:action => 'index') 
    else 
     render('new') 
    end 
end 

def edit 
    @client = Client.find(params[:id]) 
end 

def update 
    @client = Client.find(params[:id]) 
    if @client.update_attributes(client_params) 
     redirect_to(:action => 'show', :id => @client.id) 
    else 
     render('edit') 
    end 
end 


def delete 
end 

private 

    def client_params 

     params.require(:client).permit(:name, :visible, :category_id, :shortdescription, :longdescription, :phonenumber, :email, :country, :lattitude, :longtitude) 
    end 
end` 

ich jemand hoffen kann helfen! Alles, wirklich, seit ich feststecke. Ich habe versucht zu lesen http://guides.rubyonrails.org/routing.html, aber ich kann nicht scheinen, herauszufinden, wo alles schief geht.

EDIT: Es könnte auch sein, dass ich falsch mit der Editieraktion verknüpfe. Nicht sicher, aber hier ist die index.html.erb

<div class="clients index"> 
<h2>Clients</h2> 

<%= link_to("Add New Client", {:action => 'new'}, :class => 'action new') %> 

<table class="listing" summary="Clients list"> 
    <tr class="header"> 

     <th>id</th> 
     <th>Name</th> 
     <th>Category</th> 
     <th>Visible</th> 
     <th>Actions</th> 
    </tr> 
    <% @clients.each do |client| %> 
    <tr> 
     <td><%= client.id %></td> 
     <td class="center"><%= client.name %></td> 
     <td class="center"><%= client.category_id %></td> 
     <td class="center"><%= client.visible ? 'Yes' : 'No' %></td> 
     <td class="actions"> 
      <%= link_to("Show", {:action => 'show', :id => client.id}, :class => 'action show') %> 
      <%= link_to("Edit", {:action => 'edit'}, :class => 'action edit') %> 
      <%= link_to("Delete", '#', :class => 'action delete') %> 
     </td> 
     <td></td> 
    </tr> 
    <% end %> 
</table> 
</div> 
+0

Es gibt keinen 'Client' mit der angegebenen' id'. Sie können dies überprüfen, wenn der Client mit Hilfe von 'Client von Ihrer Konsole aus existiert.existiert? (id_of_the_client_you_are_searching) ' – Emu

+0

Aber IDs mit meinen Kunden existieren? Ich erhalte sie aus meiner Sicht und sie werden in das Ansichtsformular übernommen. – sneglefar

+0

Wie lautet die URL, über die Sie auf Ihre Seite zugreifen? – Geoffroy

Antwort

2

Sie vermissen id-Attribut in Ihrem Pfad. Nehmen Sie folgende Änderungen vor:

<%= link_to("Edit", {:action => 'edit', :id => client.id}, :class => 'action edit') %> 
+0

Danke !! Im Nachhinein sollte ich mich selbst bemerkt haben. – sneglefar

1

Sie müssen id auf Ihren bearbeiten Link zur Verfügung zu stellen

<%= link_to("Edit", {:action => 'edit', :id => client.id }, :class => 'action edit') %> 
+0

Whoa zu zeigen. Wie einfach. Es sind diese kleinen Dinge. Danke für die Mühe Jungs! – sneglefar

+0

Es sollte Client nicht @client sein. –

+0

Wahr! Markierte deine als die richtige Antwort daher die richtige Syntax! Danke an euch beide, – sneglefar