ActionView :: Template :: Error(未初始化的常量ActionView :: CompiledTemplates :: Cflags

时间:2016-07-23 18:16:45

标签: ruby-on-rails

我有一个非常基本的Photo and Comments模型,然后我有一个构建的Cflags模型,用于标记注释。当我访问photos / show.html.erb视图时,我从Heroku日志中收到以下错误。

ActionView::Template::Error (uninitialized constant ActionView::CompiledTemplates::Cflags

photos/show.html.erb
.
.
<% @photo.comments.each do |comment| %>
  <%= form_for([comment, Cflags.new]) do |f| %>
    <%= f.hidden_field :user_id, value: current_user.id %>
    <%= f.submit "Report Inappropiate" %>
  <% end %>
<% end %> 

resources :photos do
  resources :comments do
    resources :cflags
  end
end

PhotosController
def show
  @photo = Photo.approved.find(params[:id])
end

CommentsController
def create
   @photo = Photo.find(params[:photo_id])
   @comment = @photo.comments.build(comment_params)
   @comment.save
   respond_to do |format|
     format.html { redirect_to :back }
     format.js 
   end 
end   

class Cflag < ActiveRecord::Base
  belongs_to :comment, counter_cache: true
  belongs_to :user, counter_cache: true
  validates :user_id, presence: true 
  validates :comment_id, presence: true
  validates :user_id, uniqueness: { 
    scope: [:comment_id],
    message: 'You can only flag a comment once. Thank you for your feedback.'
  }
  default_scope -> { order(created_at: :desc) }
end

class CflagsController < ApplicationController
before_action :logged_in_user

def new
end

def create
  @comment = Comment.find(params[:comment_id])
  @cflag = @comment.cflags.build(cflag_params)
    if @cflag.save
      if @comment.cflags_count > 1
        @comment.update_attribute(:approved, false)  
        flash[:success] = "Flag created! Comment ##{@comment.id} has been removed for review. Thank you for your feedback"
        redirect_to :back
      else    
        flash[:success] = "Flag created! Thank you for your feedback"
        redirect_to :back
      end
    else
      redirect_to :back, notice: @cflag.errors.full_messages  
    end    
  end    

  private 
    def cflag_params
      params.require(:cflag).permit(:user_id, :comment_id).merge(user_id: current_user.id)
    end
end

create_table "cflags", force: :cascade do |t|
  t.integer  "comment_id"
  t.integer  "user_id"
  t.datetime "created_at", null: false
  t.datetime "updated_at", null: false
end

add_index "cflags", ["comment_id"], name: "index_cflags_on_comment_id"
add_index "cflags", ["user_id"], name: "index_cflags_on_user_id"

1 个答案:

答案 0 :(得分:0)

你有一个错字。您的模型称为Cflag而不是Cflags。改变这个:

photos/show.html.erb
.
.
<% @photo.comments.each do |comment| %>
  <%= form_for([comment, Cflags.new]) do |f| %>
    <%= f.hidden_field :user_id, value: current_user.id %>
    <%= f.submit "Report Inappropiate" %>
  <% end %>
<% end %> 

到这个

photos/show.html.erb
.
.
<% @photo.comments.each do |comment| %>
  <%= form_for([comment, Cflag.new]) do |f| %>
    <%= f.hidden_field :user_id, value: current_user.id %>
    <%= f.submit "Report Inappropiate" %>
  <% end %>
<% end %>