Reputation: 42049
I have installed the Enki (blogging) gem https://github.com/xaviershay/enki together with the Forem (forums) gem https://github.com/radar/forem that uses Devise for its registration. Everything seems to be working except when I click a link
<li><%= link_to t('delete', :scope => 'forem.topic'), topic_post_path(@topic, post), :method => :delete, :confirm => t("are_you_sure") %></li>
to delete a post (or anything else) inside the forums, I'm getting this error message
Unknown action
The action 'show' could not be found for Forem::PostsController
I note that the Forem link has :method => :delete
so this shouldn't be happening. Also, when I use Forem without Enki, I don't get this problem. I assume that for some reason the rails app is not seeing the :method => :delete so the method is being registered as a "show" instead of a destroy action, but I don't know why. In the logfile it says
* REQUEST_METHOD : GET –
I'm guessing there's some sort of conflict in the routing that's disabling the :method => :delete but I can't figure it out.
config/routes.rb
Enki::Application.routes.draw do
mount Forem::Engine, :at => "/forums"
devise_for :users
namespace 'admin' do
resource :session
resources :posts, :pages do
post 'preview', :on => :collection
end
resources :comments
resources :undo_items do
post 'undo', :on => :member
end
match 'health(/:action)' => 'health', :action => 'index', :as => :health
root :to => 'dashboard#show'
end
resources :archives, :only => [:index]
resources :pages, :only => [:show]
constraints :year => /\d{4}/, :month => /\d{2}/, :day => /\d{2}/ do
get ':year/:month/:day/:slug/comments' => 'comments#index'
post ':year/:month/:day/:slug/comments' => 'comments#create'
get ':year/:month/:day/:slug/comments/new' => 'comments#new'
get ':year/:month/:day/:slug' => 'posts#show'
end
scope :to => 'posts#index' do
get 'posts.:format', :as => :formatted_posts
get '(:tag)', :as => :posts
end
root :to => 'posts#index'
end
rake routes
forem /forums {:to=>Forem::Engine}
new_user_session GET /users/sign_in(.:format) {:action=>"new", :controller=>"devise/sessions"}
user_session POST /users/sign_in(.:format) {:action=>"create", :controller=>"devise/sessions"}
destroy_user_session DELETE /users/sign_out(.:format) {:action=>"destroy", :controller=>"devise/sessions"}
user_password POST /users/password(.:format) {:action=>"create", :controller=>"devise/passwords"}
new_user_password GET /users/password/new(.:format) {:action=>"new", :controller=>"devise/passwords"}
edit_user_password GET /users/password/edit(.:format) {:action=>"edit", :controller=>"devise/passwords"}
PUT /users/password(.:format) {:action=>"update", :controller=>"devise/passwords"}
cancel_user_registration GET /users/cancel(.:format) {:action=>"cancel", :controller=>"devise/registrations"}
user_registration POST /users(.:format) {:action=>"create", :controller=>"devise/registrations"}
new_user_registration GET /users/sign_up(.:format) {:action=>"new", :controller=>"devise/registrations"}
edit_user_registration GET /users/edit(.:format) {:action=>"edit", :controller=>"devise/registrations"}
PUT /users(.:format) {:action=>"update", :controller=>"devise/registrations"}
DELETE /users(.:format) {:action=>"destroy", :controller=>"devise/registrations"}
admin_session POST /admin/session(.:format) {:action=>"create", :controller=>"admin/sessions"}
new_admin_session GET /admin/session/new(.:format) {:action=>"new", :controller=>"admin/sessions"}
edit_admin_session GET /admin/session/edit(.:format) {:action=>"edit", :controller=>"admin/sessions"}
GET /admin/session(.:format) {:action=>"show", :controller=>"admin/sessions"}
PUT /admin/session(.:format) {:action=>"update", :controller=>"admin/sessions"}
DELETE /admin/session(.:format) {:action=>"destroy", :controller=>"admin/sessions"}
preview_admin_posts POST /admin/posts/preview(.:format) {:action=>"preview", :controller=>"admin/posts"}
admin_posts GET /admin/posts(.:format) {:action=>"index", :controller=>"admin/posts"}
POST /admin/posts(.:format) {:action=>"create", :controller=>"admin/posts"}
new_admin_post GET /admin/posts/new(.:format) {:action=>"new", :controller=>"admin/posts"}
edit_admin_post GET /admin/posts/:id/edit(.:format) {:action=>"edit", :controller=>"admin/posts"}
admin_post GET /admin/posts/:id(.:format) {:action=>"show", :controller=>"admin/posts"}
PUT /admin/posts/:id(.:format) {:action=>"update", :controller=>"admin/posts"}
DELETE /admin/posts/:id(.:format) {:action=>"destroy", :controller=>"admin/posts"}
preview_admin_pages POST /admin/pages/preview(.:format) {:action=>"preview", :controller=>"admin/pages"}
admin_pages GET /admin/pages(.:format) {:action=>"index", :controller=>"admin/pages"}
POST /admin/pages(.:format) {:action=>"create", :controller=>"admin/pages"}
new_admin_page GET /admin/pages/new(.:format) {:action=>"new", :controller=>"admin/pages"}
edit_admin_page GET /admin/pages/:id/edit(.:format) {:action=>"edit", :controller=>"admin/pages"}
admin_page GET /admin/pages/:id(.:format) {:action=>"show", :controller=>"admin/pages"}
PUT /admin/pages/:id(.:format) {:action=>"update", :controller=>"admin/pages"}
DELETE /admin/pages/:id(.:format) {:action=>"destroy", :controller=>"admin/pages"}
admin_comments GET /admin/comments(.:format) {:action=>"index", :controller=>"admin/comments"}
POST /admin/comments(.:format) {:action=>"create", :controller=>"admin/comments"}
new_admin_comment GET /admin/comments/new(.:format) {:action=>"new", :controller=>"admin/comments"}
edit_admin_comment GET /admin/comments/:id/edit(.:format) {:action=>"edit", :controller=>"admin/comments"}
admin_comment GET /admin/comments/:id(.:format) {:action=>"show", :controller=>"admin/comments"}
PUT /admin/comments/:id(.:format) {:action=>"update", :controller=>"admin/comments"}
DELETE /admin/comments/:id(.:format) {:action=>"destroy", :controller=>"admin/comments"}
undo_admin_undo_item POST /admin/undo_items/:id/undo(.:format) {:action=>"undo", :controller=>"admin/undo_items"}
admin_undo_items GET /admin/undo_items(.:format) {:action=>"index", :controller=>"admin/undo_items"}
POST /admin/undo_items(.:format) {:action=>"create", :controller=>"admin/undo_items"}
new_admin_undo_item GET /admin/undo_items/new(.:format) {:action=>"new", :controller=>"admin/undo_items"}
edit_admin_undo_item GET /admin/undo_items/:id/edit(.:format) {:action=>"edit", :controller=>"admin/undo_items"}
admin_undo_item GET /admin/undo_items/:id(.:format) {:action=>"show", :controller=>"admin/undo_items"}
PUT /admin/undo_items/:id(.:format) {:action=>"update", :controller=>"admin/undo_items"}
DELETE /admin/undo_items/:id(.:format) {:action=>"destroy", :controller=>"admin/undo_items"}
admin_health /admin/health(/:action)(.:format) {:action=>"index", :controller=>"admin/health"}
admin_root /admin(.:format) {:controller=>"admin/dashboard", :action=>"show"}
archives GET /archives(.:format) {:action=>"index", :controller=>"archives"}
page GET /pages/:id(.:format) {:action=>"show", :controller=>"pages"}
GET /:year/:month/:day/:slug/comments(.:format) {:year=>/\d{4}/, :month=>/\d{2}/, :day=>/\d{2}/, :controller=>"comments", :action=>"index"}
POST /:year/:month/:day/:slug/comments(.:format) {:year=>/\d{4}/, :month=>/\d{2}/, :day=>/\d{2}/, :controller=>"comments", :action=>"create"}
GET /:year/:month/:day/:slug/comments/new(.:format) {:year=>/\d{4}/, :month=>/\d{2}/, :day=>/\d{2}/, :controller=>"comments", :action=>"new"}
GET /:year/:month/:day/:slug(.:format) {:year=>/\d{4}/, :month=>/\d{2}/, :day=>/\d{2}/, :controller=>"posts", :action=>"show"}
formatted_posts GET /posts.:format {:controller=>"posts", :action=>"index"}
posts GET /(:tag)(.:format) {:controller=>"posts", :action=>"index"}
root / {:controller=>"posts", :action=>"index"}
Upvotes: 3
Views: 4460
Reputation: 10684
It is because rails jquery_ujs file not getting loaded in your javascript.
Do this in your layout file, normaly named as application.html.erb
<%= javascript_include_tag "application" %>
this will include application.js file and also include your jquery_ujs file
You should check app/assets/application.js file wether this line exists there
//= require jquery_ujs
If not add it by yourself.
It will cure :)
Hint:
One of these could be the cause of problem:
1- It may cause when you are not using application.js
2- You are using different file to include libraries and forget to inlucde jquery_ujs there
Upvotes: 1
Reputation: 6415
Make sure your JavaScript is being included in your layout file:
<%= javascript_include_tag :defaults %> #Rails 3.0.x
<%= javascript_include_tag :application %> #Rails 3.1+
<%= csrf_meta_tag %>
For delete, you should really use button_to
instead. Link_to
should not be used for HTTP POST requests.
Upvotes: 5
Reputation: 10422
You need to include the jQuery for Rails gem in your Gemfile
gem 'jquery-rails'
Then you have to run bundle install and restart the server. This is because even if you have included in your layout.html.erb the jQuery framework you need the adapter for jQuery to use the unobstrusive scripting.
Upvotes: 1