2016-04-17 2 views
0

У меня есть список пользователей, и я хочу удалить элементы по щелчку ссылки «удалить» в той же строке.Rails - удалить элемент li с Ajax

Просмотров:

# users/index.html.erb 
<ul class="users"> 
    <%= render @users %> 
</ul> 

# users/_user.html.erb 
<li id="user-<%= user.id %>"> 
    <%= link_to user.email, user %> 
    <% if current_user.admin? %> 
     <%= link_to "delete", user, remote: true, method: :delete, data: { confirm: "You sure?" } %> 
    <% end %> 
</li> 

Пользователи Контроллер:

# users_controller.rb 
def destroy 
    User.find(params[:id]).destroy 
    flash[:success] = "User deleted" 
    respond_to do |format| 
    format.html { redirect_to users_url } 
    format.js 
    end 
end 

Javascript, чтобы удалить элемент списка является:

# users/destroy.js.erb 
$("li#<%= user.id %>").remove(); 

по щелчку ничего не происходит, но на странице обновления ресурса правильно уничтожен. LOG Проверка сервера я вижу следующее сообщение об ошибке:

Completed 500 Internal Server Error in 40ms (ActiveRecord: 5.0ms)

ActionView::Template::Error (undefined local variable or method user' for #<#<Class:0x0000000851d300>:0x00000008e8e7e0>): 1: $("li#<%= user.id %>").remove(); app/views/users/destroy.js.erb:1:in _app_views_users_destroy_js_erb___2066095411338793994_74738360'
app/controllers/users_controller.rb:46:in `destroy'

Можете ли вы помочь мне пожалуйста понять, где ошибка и почему «пользователь» не определен? Благодаря

редактировать

Я знаю, что есть много д & похожи на этот вопрос, и я на самом деле построить мой код консультационного эти вопросы. Тем не менее, я застрял, и мне нужна поддержка. Pls не помещает вопрос как дубликат.

ответ

1

Ваш шаблон destroy.js.erb не получает переменную пользователя, так как она не определена. попробуйте:

def destroy 
@user = User.find(params[:id]) 
@user.destroy 

respond_to do |format| 
    format.html { redirect_to users_url } 
    format.js 
end 
end 

и

$("li#<%= @user.id %>").remove(); 

причина это работает, потому что рельсы передает данные от контроллера для просмотра, установив переменные с префиксом @. поэтому вы устанавливаете @user в экземпляр модели, которую вы захватили из базы данных, затем вы вызвали .destroy на этой модели, и она была удалена, а затем вы отобрали свой шаблон destroy.js, в котором также был @user, и вы удалили элемент списка, соответствующий селектору «li # 233», или независимо от того, что целое число было

+0

Привет @ Kirka121 спасибо за Ваш ответ и для вашего объяснения. С вашим кодом я действительно не получаю ошибку, но элемент не исчезает, и мне все еще нужна перезагрузка страницы, чтобы увидеть различия. – davideghz

+1

$ ("li # user - <% = @ user.id%>"). Remove(); вы получаете неправильный идентификатор. –

+0

спасибо @leiliu не видел эту опечатку в ответе Kirka121, теперь все работает – davideghz

0

Вы не определяете переменную user.

Вы должны сохранить @user_id в переменной, доступной в вашем js.erb. Как что:

def destroy 
    @user_id = params[:id] 
    ... 
end 

И потом:

$("li#<%= @user_id %>").remove();

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