#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/415. Это сработало — 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. Спасибо