2016-04-12 10 views
1

Neden bir kimliği bir kimliği almaya çalıştığınızda ActiveRecord :: RecordNotFound Hatası alıyorum neden bulmak için yardıma ihtiyacım var. Aşağıda benim hata ve kod. Bu yayına başka herhangi bir dosya eklenmesi gerekiyorsa lütfen bana bildirin. Yardım için şimdiden teşekkür ederiz!Params [: id] ActiveRecord :: RecordNotFound Hatası döndürme

Hata

ActiveRecord::RecordNotFound in WikisController#show 

Couldn't find Wiki with 'id'=edit 

def show 
    @wiki = Wiki.find(params[:id]) #Highlighted line within error 
    authorize @wiki 
end 

Kontrolör

class WikisController < ApplicationController 
    before_action :authenticate_user!, except: [:index, :show] 

    def index 
    @wikis = Wiki.visible_to(current_user) 
    authorize @wikis 
    end 

    def new 
    @wiki = Wiki.new 
    authorize @wiki 
    end 

    def create 
    @wiki = current_user.wikis.create(wiki_params) 
    authorize @wiki 

    if @wiki.save 
     flash[:notice] = "Wiki was saved." 
     redirect_to @wiki 
    else 
     flash.now[:alert] = "Error saving Wiki. Try again." 
     render :new 
    end 
    end 

    def show 
    @wiki = Wiki.find(params[:id]) 
    authorize @wiki 

    unless @wiki.private == nil 
     flash[:alert] = "You must be signed in to view private topics." 
     redirect_to new_session_path 
    end 
    end 

    def edit 
    @wiki = Wiki.find(params[:id]) 
    authorize @wiki 
    end 

    def update 
    @wiki = Wiki.find(params[:id]) 
    authorize @wiki 

    if @wiki.update_attributes(wiki_params) 
     flash[:notice] = "Wiki was updated." 
     redirect_to @wiki 
    else 
     flash.now[:alert] = "Error saving the Wiki. Try again." 
     render :edit 
    end 
    end 

    def destroy 
    @wiki = Wiki.find(params[:id]) 
    authorize @wiki 

    if @wiki.destroy 
     flash[:notice] = "\"#{@wiki.title}\" was deleted successfully." 
     redirect_to root_path 
    else 
     flash.now[:alert] = "Error deleting Wiki. Try again." 
     render :show 
    end 
    end 

    private 

    def wiki_params 
    params.require(:wiki).permit(:title, :body, :role) 
    end 
end 

Rotalar

Rails.application.routes.draw do 

    resources :wikis 
    resources :charges, only: [:new, :create] 

    devise_for :users 
    resources :users, only: [:update, :show] do 
    post 'downgrade' 
    end 

    get 'welcome/index' 
    get 'welcome/about' 
    root 'welcome#index' 
end 
+1

before_action rotalarınızı ekleyin kullanarak kontrolörü kadar kısaltabilir: – Shani

+0

@Tucker Bu hatayı önceden anlamak için genellikle 'find_by (attrs_hash)' kullanırım. Hiçbir kayıt bulunmazsa sıfırlanır ve bu durumu ele almanıza izin verilir. –

+0

@Shani - Rotaları ekledim. URL'm "wikis/id/edit" yerine "wikis/edit" oluşturduğundan kesinlikle bir rota sorunu var. Burada neyi özlüyorum? – Tucker

cevap

2

sen 012 erişen gibi görünüyor wikis/:id/edit yerineURL. Bağlantınızın görünümünüzde doğru şekilde oluşturulduğundan emin olun.

<%= link_to edit_wiki_path(@wiki) %>

Ayrıca kesinlikle

class WikisController < ApplicationController 
    ... 
    before action :set_wiki, only: [:show, :edit, :update, :destroy] 

    ... 

    private 

    def set_wiki 
    # Now this is being set in your show, edit, update, destroy method 
    # Make sure to delete from the above mentioned methods 
    @wiki = Wiki.find(params[:id]) 
    end 
+0

Haklısınız, sadece URL'mimin orada bulunan kimlikten ziyade wikis/edit olduğunu fark ettim. Sadece rotaları gönderdim. – Tucker

+0

Peki o zaman sorun çözüldü mü? – Uzbekjon

+0

Rotalarımda eksik olan URL'nin kimlik kısmının eksik olmasına neden olan nedir? Benimle çıplak ol, lütfen hala Rails'e oldukça yeni. – Tucker

0

sen (erb kullanılıyorsa) böyle bir şey var senin görünümünde emin olun. düzenleme yolu yanlış görünüyor ..
+1

Bu, denetleyiciyi kısaltmanın/temizlemenin harika bir yoludur. Rails öğreniyorum, bu benim için yeni. Bunun için teşekkürler! Hatanıma gelince, yalnızca URL’imin doğru üretilmediğini fark ettim. Wikis/id/edit 'yerine wikis/edit' alıyorum. – Tucker