【问题标题】:Rails 3: can't figure out this Actionview Template error, need help please?Rails 3:无法弄清楚这个 Actionview 模板错误,需要帮助吗?
【发布时间】:2011-11-25 20:40:56
【问题描述】:

我在尝试使用 ajax 响应进行 POST 时收到 ActionviewTemplate 错误。 'create' 方法一直在寻找默认的 create.js.erb 文件,但我特别指出了它应该呈现的文件。

我尝试在我的 respond_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"

欣赏控制器

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

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 model-view-controller


    【解决方案1】:

    您的params 支票不正确; liked_id 嵌套在 :appreciation 哈希中。

    【讨论】:

      【解决方案2】:

      liked_id 不在 params 的顶层,它嵌套在 params[:appreciation] 中。您在find 中的正确位置查找它,但在if; elsif 逻辑中您将其查找为params[:liked_id]

      那里不存在,所以你的条件都没有运行。动作结束,没有任何关于渲染什么的指令,所以默认发生。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多