2016-07-23 10 views
-1

私は非常に基本的な写真とコメントのモデルを使用しています。そして、フラグを立てるためのCflagsモデルを作成しました。コメント。 photos/show.html.erbビューにアクセスすると、Herokuログから次のエラーが表示されます。(定数Cflagを自動ロードすることはできません。/app/app/models/cflag.rbで定義することができます)

LoadError (Unable to autoload constant Cflag, expected /app/app/models/cflag.rb to define it) 

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 %> 

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 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 

resources :photos do 
    resources :comments do 
    resources :cflags 
    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" 

私はフォームを変更した場合:

<% @photo.comments.each do |comment| %> 
    <%= form_for([comment, comment.cflags.build]) do |f| %> 
    <%= f.hidden_field :user_id, value: current_user.id %> 
    <%= f.submit "Report Inappropiate" %> 
    <% end %> 
<% end %> 

I get the same error: 

LoadError (Unable to autoload constant Cflag, expected /app/app/models/cflag.rb to define it): 

答えて

0

コントローラ名にタイプミスがあります。

お使いのモデルはCFlagで、Fは大文字ですが、コントローラの文字数はfです。 CFlagsController

class CFlagsController < ApplicationController 
before_action :logged_in_user 

def create 
    ... 
end 
end 
関連する問題