I’m using an if elsif elsif elsif end statement and I”m getting the following error as ActionView is looking for a create.js.erb file because its the name of the method. I tried to specify the :action specifically but it isn’t working. If I remove the elsifs and use just a single if end statement it renders the :action 'create_like‘.. shown below:
def create
if params[:liked_id]
@post = Post.find(params[:appreciation][:liked_id])
current_user.like!(@post)
respond_to do |format|
format.html { redirect_to @post }
format.js { render :action => "create_like" }
end
end
end
## ERROR
ActionView::MissingTemplate (Missing template appreciations/create with {:handlers=>[:erb, :rjs, :builder, :rhtml, :rxml, :haml], :formats=>[:js, "application/ecmascript", "application/x-ecmascript", "*/*"], :locale=>[:en, :en]} in view paths "/Users/iHal/Desktop/WORK/GP/app/views", "/Users/iHal/.rvm/gems/ruby-1.9.2-p290@rails3/bundler/gems/rails_admin-0060ad2d78ed/app/views", "/Users/iHal/.rvm/gems/ruby-1.9.2-p290@rails3/gems/client_side_validations-3.1.0/app/views", "/Users/iHal/.rvm/gems/ruby-1.9.2-p290@rails3/gems/devise-1.3.4/app/views"):
UsersController
class AppreciationsController < ApplicationController
before_filter :authenticate_user!
def create
if params[:liked_id]
@post = Post.find(params[:appreciation][:liked_id])
current_user.like!(@post)
respond_to do |format|
format.html { redirect_to @post }
format.js { render :action => "create_like" }
end
elsif params[:voted_id]
@post = Post.find(params[:appreciation][:voted_id])
current_user.vote!(@post)
respond_to do |format|
format.html { redirect_to @post }
format.js { render :action => "create_vote" }
end
elsif params[:thanked_id]
@post = Post.find(params[:appreciation][:thanked_id])
current_user.thank!(@post)
respond_to do |format|
format.html { redirect_to @post }
format.js {render :action => 'create_thank'}
end
end
end
def destroy
if params[:liked_id]
@post = Appreciation.find(params[:id]).liked
current_user.unlike!(@post)
respond_to do |format|
format.html { redirect_to @post }
format.js { render :action => "destroy_like" }
end
elsif params[:vote_id]
@post = Appreciation.find(params[:id]).voted
current_user.unvote!(@post)
respond_to do |format|
format.html { redirect_to @post }
format.js { render :action => "destroy_vote" }
end
elsif params[:thanked_id]
@post = Appreciation.find(params[:id]).thanked
current_user.unthank!(@post)
respond_to do |format|
format.html { redirect_to @post }
format.js { render :action => "destroy_thank" }
end
end
end
end
edit
Started POST "/appreciations" for 127.0.0.1 at 2011-11-24 23:57:18 -0700
Processing by AppreciationsController#create as JS
Parameters: {"utf8"=>"✓", "authenticity_token"=>"T3PeKRaSJSrESFTOCQ7+4LiM4BKaWkcaQ6cXpSqK38k=", "appreciation"=>{"liked_id"=>"75"}, "commit"=>"Like"}
User Load (1.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = 3 LIMIT 1
Completed in 309ms
ActionView::MissingTemplate (Missing template appreciations/create with {:handlers=>[:erb, :rjs, :builder, :rhtml, :rxml, :haml], :formats=>[:js, "application/ecmascript", "application/x-ecmascript",...
Sorry, you should call
returnafter eachrespond_to. Because after called if, the method process continued to the end and trying to call render default. For example:Or in your case