I’m trying to learn how to use AJAX in my rails apps so i’ve decided to start with something simple. I have a blog app on which user can vote on any blog post. Here is my code for posts#vote:
posts_controller.rb
class PostsController < ApplicationController
(...)
def vote
post = Post.find(params[:id])
if current_user.voted_on?(post)
current_user.unvote_for(post)
else
current_user.vote_for(post)
end
respond_to do |format|
format.html { redirect_to post_path(post) }
format.js
end
end
end
and here is a link code for my posts#view:
view.html.erb
<%= link_to "Vote", vote_post_path(post.id), :remote => true %>
And now, if i’ll click my Vote link, posts#vote action works and vote is casted, however i’m getting an error:
ActionView::MissingTemplate (Missing template posts/vote,
application/vote with {:handlers=>[:haml, :coffee, :erb, :builder],
:locale=>[:en], :formats=>[:js, :html]}.
I have (empty) vote.rjs file in my views/posts folder but for some reason rails can’t see it. According to error, the only file extensions that rails is searchng for are .haml, .coffee, .erb and .builder. Shouldn’t there be also a .rjs extension on that list? Thanks in advance.
Your file should be called
vote.js.erb. Rails doesn’t use a.rjsextension.