Rails 3: не могу понять эту ошибку Actionview Template, нужна помощь, пожалуйста? - PullRequest
0 голосов
/ 26 ноября 2011

Я получаю сообщение об ошибке ActionviewTemplate при попытке выполнить POST с помощью ответа ajax.Метод 'create' продолжает поиск файла create.js.erb по умолчанию, но я специально указал на файл, который должен отображаться.

Я пытался добавить «end and return» в мои блоки response_to, но ничего не происходит.

Started POST "/appreciations" for 127.0.0.1 at 2011-11-25 13:30:09 -0700
  Processing by AppreciationsController#create as JS
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"T3PeKRaSJSrESFTOCQ7+4LiM4BKaWkcaQ6cXpSqK38k=", "appreciation"=>{"liked_id"=>"75"}, "commit"=>"Like"}
  User Load (1.2ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 3 LIMIT 1
Completed   in 343ms

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"

Контроллер Appreciatins

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

Ответы [ 2 ]

1 голос
/ 26 ноября 2011

Ваш params чек неверен; liked_id вложено в хэш :appreciation.

0 голосов
/ 26 ноября 2011

liked_id не находится в верхнем уровне параметров, оно вложено в params[:appreciation]. Вы ищете его в нужном месте в find, но в логике if; elsif вы ищете его как params[:liked_id].

Его там нет, поэтому ни одно из ваших условий не выполняется. Действие заканчивается без каких-либо инструкций о том, что следует визуализировать, поэтому по умолчанию выполняется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...