Ошибка удаления действия в блоге?

#ruby-on-rails-3 #routes

#ruby-on-rails-3 #маршруты

Вопрос:

У меня есть сайт в стиле блога, и под каждой статьей есть обычные функции «просмотр», «редактирование» и «удаление» для пользователей после входа в систему. Проблема в том, что когда я нажимаю «Удалить» ссылку, она отправляет вас на страницу «просмотр» статьи, но не удаляет статью. Не могу разобраться в этом, поскольку пути удаления и просмотра в моем коде разные, но делают одно и то же …??

 class ArticlesController < ApplicationController

  before_filter :authenticate_user!, :except => [:index, :show]

# GET /articles
# GET /articles.xml
# display the amount of article on the home page

def index
@articles = Article.published.page(params[:page]).per(6).ordered

respond_to do |format|
  format.html # index.html.erb
 # format.atom #index.atom.builder
  format.xml  { render :xml => @articles }
end
end


 # GET /articles/1
 # GET /articles/1.xml
def show
  @article = Article.find(params[:id])
  @comment = Comment.new(:article=>@article)

respond_to do |format|
  format.html # show.html.erb
  format.xml  { render :xml => @article }
end
end

...
  

/контроллеры/article_controller

 # DELETE /articles/1.xml
 def destroy
@article = Article.find(params[:id])
 authorize! :destroy, @article
@article.destroy

respond_to do |format|
  format.html { redirect_to(articles_url) }
  format.xml  { head :ok }
  end
 end
end
  

просмотры/статьи/_article.html.erb

 <div class= "art-links">
<%= link_to 'Read', article %>
  <% if can? :update, article %>
 | <%= link_to 'Edit', edit_article_path(article) %> |      
 <% end %>

 <% if can? :destroy, article %>
  <%= link_to 'Delete', article, :confirm => 'Are you sure?', :method => :delete %>
<% end %>
  </div>
<br />
  

Ответ №1:

Это может быть связано с тем, что у вас не настроены правильные файлы javascript. Rails 3 использует ненавязчивый javascript для создания DELETE запроса при нажатии на ссылку. Если javascript не работает, он вернется к выполнению a, GET которое будет отображать show действие.

Убедитесь, что у вас есть rails.js и prototype.js в вашем макете. Если вы используете фреймворк javascript, отличный от Prototype, вам понадобится этот фреймворк (jQuery или любой другой) вместе с соответствующим портом rails.js .

Комментарии:

1. Хорошее замечание — вчера я установил драгоценный камень «jquery-rails» после эпизода Railscast, насколько я понимаю, он удаляет prototype.js фреймворк. Сахар.. как мне исправить это, чтобы оно снова заработало???

2. Вы запускали jquery:install генератор после добавления драгоценного камня?

3. @Austin Я запустил (jquery: install) cmd после запуска bundle install и получил эту сумасшедшую ошибку — опубликовал снимок выше. Есть предложения?

4. Очевидно, вам нужно выполнить bundle update . Смотрите обсуждение здесь: github.com/rails/jquery-ujs/issues/41

5. Это сработало — btn ‘delete’ по-прежнему не работает, хотя все установлено нормально. Я что-то упускаю?

Ответ №2:

Эта строка

 format.html { redirect_to(articles_url) }
  

следует отправить его обратно в ваше индексное действие, где вы хотите закончить?

Комментарии:

1. Я хочу, чтобы он «удалял» статью при нажатии, а затем возвращался на страницу индекса

2. Можете ли вы опубликовать код для ссылки удаления, ваш контроллер выглядит нормально

Ответ №3:

Этот случай произошел и в моем проекте.

Наконец-то я знаю причину. Это было потому, что мой application.js то, что находится в, app/assets/javascript заменялось другим application.js , которое я копирую, когда пытаюсь изучить bootstap.

Я просто добавляю эти 3 строки обратно:

//= требуется jquery

//= требовать jquery_ujs

//= требуется jquery-ui

для application.js в верхней строке все в порядке.

и поместите это

в моем приложении / views / layout /application.html.erb

это работает..

в случае, если jquery был установлен, все равно ошибка, как у меня: D

извините за плохой английский 🙂

Комментарии:

1. Я немного отредактировал. Не уверен, что означает ‘n’ в вашем ответе. Это для ‘не’ или ‘и’. Пожалуйста, используйте полные английские слова.

2. Спасибо за ваш совет @Jayan , n означает и. Извините, пришлось использовать n вместо and. Спасибо