2015-11-02 3 views
0

В настоящее время я работаю над приложением rails с ajax, и функция destroy не работает должным образом, так как я продолжаю сталкиваться с ошибкой ActiveRecord::RecordNotFound in ItemsController#destroy.ActiveRecord :: RecordNotFound с ajax destroy

Для получения дополнительной информации я могу удалить элемент только отлично, но часть ajax не работает, и элемент исчезнет только при обновлении страницы.

Я не могу точно определить, что может быть основным источником проблемы, и мне в настоящее время нужна помощь.

Заранее благодарен!

items_controller.rb

class ItemsController < ApplicationController 

    def create 
    @item = current_user.items.build(item_params) 
    if @item.save 
     flash[:notice] = "Item was saved" 
     redirect_to user_path(current_user) 
    else 
     flash[:error] = "There was an error saving the item. Please try again" 
     render :new 

    end 
    end 

    def destroy 
    @items = Item.find(params[:id]) 

    if @items.destroy 
     flash[:notice] = "Item was removed" 
    else 
     flash[:error] = "Item couldn't be deleted.try again!" 
    end 
    end 

    respond_to do |format| 
    format.html 
    format.js 
    end 

    def new 
    @item = Item.new 
    end 

    private 

    def item_params 
    params.require(:item).permit(:name) 
    end 

end 

users_controller.rb

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

    def new 
     @user = User.new 
    end 


    def show 
    @user = params[:id].nil? ? current_user : User.find(params[:id]) 
    @items = @user.items 
    end 

    def update 
    if current_user.update_attributes(user_params) 
     flash[:notice] = "User information updated" 
     redirect_to edit_user_registration_path 
    else 
     flash[:error] = "Invalid user information" 
     redirect_to edit_user_registration_path 
     end 
    end 


    private 

    def user_params 
    params.require(:user).permit(:name) 
    end 
end 

_item.html.erb

<p id="items-<%= item.id %>"> 
    <%= link_to "", [current_user, item], method: :delete,remote: true, class: 'glyphicon glyphicon-ok' %> 
    <%= item.name %> 
</p> 

destroy.js.erb

<% if @items.destroyed? %> 
    $('#items' +<%= @items.id %>).hide(); 
<% else %> 
    $('#items' +<%= @items.id %>).prepend("<div class='alert alert-danger'><%= flash[:error] %></div>"); 
<% end %> 

routes.rb

Rails.application.routes.draw do 


    devise_for :users 
    resources :users, only: [:update, :show, :new, :index] 

    resources :users do 
    resources :items, only: [:create, :new, :destroy] 
    end 


    authenticated :user do 
root to: "users#show", as: :authenticated_root, via: :get 
end 


unauthenticated do 
    root 'welcome#index' 
end 

end 

ответ

0
def destroy 
    @items = Item.find(params[:id]) 

    if @items.destroy 
     flash[:notice] = "Item was removed" 
    else 
     flash[:error] = "Item couldn't be deleted.try again!" 
    end 
    end 

Похоже, что вы заканчиваете свой метод #destroy перед перенаправлением/рендеринга ничего.

0

Я думал, что вы должны исправить ваш уничтожить метод в этом:

def destroy 
    @items = Item.find(params[:id]) 

    if @items.destroy 
    flash[:notice] = "Item was removed" 
    else 
    flash[:error] = "Item couldn't be deleted.try again!" 
    end 
    respond_to do |format| 
    format.html 
    format.js 
    end 
end 

Я надеюсь, что это поможет вам.

Смежные вопросы