2017-11-22 3 views
2

Ich arbeite an meinem ersten Rails-Projekt und ich bin in einem anhaltenden Problem. Ich vermute, dass es etwas mit dem Routing zu tun hat, aber ich kann anscheinend nichts online finden.Rails Fehler: ActiveRecord :: RecordNotFound

Ich nehme an, es ist eine ziemlich einfache Lösung, also bitte schauen Sie und lassen Sie mich wissen, wenn Sie helfen können.

TL; DR

Was ich versucht wurde

  • Konto Detail-Karten angezeigt werden Name, Telefonnummer und eine Notiz zu erreichen.
  • Eine Schaltfläche zum Löschen und Bearbeiten ermöglicht Benutzern das Löschen oder Bearbeiten.

Was geschieht:

  • Bearbeiten und Löschen-Tasten geben eine seltsame param.
  • siehe Bild

Image of error, Showing Rails getting a different ID

-Controller

class AccountdetailsController < ApplicationController 

    def index 
     @accountdetail = Accountdetail.all 
    end 

    #I can't find the ID to show the relevent card. 

    def show 
     @accountdetail = Accountdetail.find(params[:id]) 

     if @accountdetail.nil? 
       redirect_to accountdetail_path 
     end 
    end 

    def new 
     @accountdetail = Accountdetail.new 
    end 

    def edit 
     @accountdetail = Accountdetail.find(params[:id]) 
    end 

    def create 
     @accountdetail = Accountdetail.new(accountdetail_params) 

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

#it affects this 

    def update 
     @accountdetail = Accountdetail.find(params[:id]) 

     if @accountdetail.update(accountdetail_params) 
      redirect_to accountdetail 
     else 
      render 'edit' 
     end 
    end 

#and this 

    def destroy 
     @accountdetail = Accountdetail.find(params[:id]) 
     @accountdetail.destroy 

     redirect_to accountdetail_path 
    end 


    private def accountdetail_params 
     params.require(:accountdetail).permit(:first_name, :last_name, :phone, :notes, :id) 
     end 
end 

Index.HTML.ERB

<div class="ui card"> 

    <div class="content"> 
     <a class="header"><%= account.first_name %> <%= account.last_name %> </a> 
     <div class="meta"> 
      <span class="date"><%= account.phone %></span> 
      <strong><p><%= account.notes %></p></strong> <br> 

     <%= link_to "edit", edit_accountdetail_path(@accountdetail) %> 
     <%= link_to 'Inspect', accountdetail_path(@accountdetail) %> 
     </div> 
    </div> 
    </div> 
<% end %> 

Routen

Rails.application.routes.draw do 
    get 'welcome/index' 


    resources :articles do 
    resources :comments 
    end 

    resources :accountdetails 

    root 'welcome#index' 

end 
+0

Könnten Sie den gesamten Index.HTML.ERB posten? –

Antwort

3

In Sie index.html.erb

<%= link_to "edit", edit_accountdetail_path(@accountdetail) %> 
<%= link_to 'Inspect', accountdetail_path(@accountdetail) %> 

mit

<%= link_to "edit", edit_accountdetail_path(account) %> 
<%= link_to 'Inspect', accountdetail_path(account) %> 

@accountdetail

folgende replace wurde vorausgesetzt, Sie alle Datensätze von Konto, da es Auswahlabfrage war Brennen im Controller. Aber hier brauchen wir nur eine Instanz, also account.

Hoffe, das hilft.

+1

Es ist eine gute Lektion für Sie, Ihre Benennung so anzupassen, dass sie der Konvention entspricht. Wenn Sie beispielsweise die Variable als Relation zu Ihren Datensätzen festlegen, sollte der Name plural sein, also in diesem Fall '@ accountdetails'. –

+0

Danke @vishal! Das hat perfekt funktioniert. – Alexander

+0

@Alexander Ich bin froh, eine Hilfe zu sein. :) – Vishal

Verwandte Themen