2013-04-19 3 views
1

Я работаю над приложением, которое позволяет пользователям прокомментировать одну «работу» (думаю, сообщение в блоге). Ассоциации в модели заключаются в следующем:Неизвестно Действие: Действие «create» не найдено для комментариевController

class User < ActiveRecord::Base 
    has_many :works 
    has_many :comments 

class Work < ActiveRecord::Base 
    belongs_to :user 
    has_many :comments 


class Comment < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :post 
    belongs_to :work 

Там есть форма на заводе показать страницу, которая позволяет пользователям размещать комментарий:

<%= form_for(@comment) do |f| %> 
    <%= render 'shared/error_messages', object: f.object %> 
    <div class="field"> 
    <%= f.text_area :content, placeholder: "Post a comment!" %> 
    </div> 
    <%= f.submit "Post", class: "btn btn-small btn-primary" %> 
<% end %> 

Сочинения контроллер выглядит следующим образом. Обратите внимание, что я добавляю сборки комментарий функциональность здесь, так что форма на странице функций Works:

class WorksController < ApplicationController 
    #before_filter :current_user, only: [:edit, :update] 

    def index 
    @works = Work.all 
    @comment = @work.comments.build(params[:comment]) 
    @comment.user = current_user 

respond_to do |format| 
    format.html # index.html.erb 
    format.xml { render :xml => @works } 
end 
end 
def create 
    @work = current_user.works.create(params[:work]) 
    redirect_to current_user 
    end 

def edit 
    @work = current_user.works.find(params[:id]) 
end 

def new 
    @work = current_user.works.new 
end 

def destroy 
    @work = current_user.works.find(params[:id]).destroy 
    flash[:success] = "Work deleted" 
    redirect_to current_user 
end 

def update 
    @work = current_user.works.find(params[:id]) 
    if @work.update_attributes(params[:work]) 
     flash[:success] = "Profile updated" 
     redirect_to @work 
    else 
     render 'edit' 
    end 
    end 


    def show 
    @work = Work.find(params[:id]) 
    @comment = @work.comments.build 
    @comment.user = current_user 
    @activities = PublicActivity::Activity.order("created_at DESC").where(trackable_type: "Work", trackable_id: @work).all 
    @comments = @work.comments.order("created_at DESC").where(work_id: @work).all 
    respond_to do |format| 
     format.html # show.html.erb 
     format.xml { render :xml => @work } 
    end 
    end 
end 

И, наконец, вот контроллер Комментарии:

class CommentsController < ApplicationController 

    before_filter :authenticate_user! 

    def index 
    @comments = Comment.all 
    end 

    def show 
    @comment = Comment.find(params[:id]) 
    @activities = PublicActivity::Activity.order("created_at DESC").where(trackable_type: "Comment", trackable_id: @comment).all 
    respond_to do |format| 
     format.html # show.html.erb 
     format.xml { render :xml => @comment } 
    end 

    def update 
    @comment = current_user.comments.find(params[:id]) 
    if @comment.update_attributes(params[:comment]) 
     flash[:success] = "Comment updated" 
     redirect_to @comment 
    end 
    end 

    def create 
    @work = Work.find(params[:id]) 
    @comment = @work.comments.build(params[:comment]) 
    @comment.user = current_user 
    if @comment.save 
     #flash[:success] = "Post created!" 
     redirect_to @work 
    else 
     render 'home#index' 
    end 
    end 
    end 
end 

При попытке подать комментарий используя форму комментария на работах показывает вид страницу, я получаю следующее сообщение об ошибке:

Неизвестного действия действия «создать» не удался найти для CommentsController

Почему он не может найти действие create на контроллере комментариев? Любая помощь будет принята с благодарностью.

Спасибо!

ответ

2

Ваш комментарий контроллер show действие пропускает end, то есть это:

def show 
    @comment = Comment.find(params[:id]) 
    @activities = PublicActivity::Activity.order("created_at DESC").where(trackable_type: "Comment", trackable_id: @comment).all 
    respond_to do |format| 
     format.html # show.html.erb 
     format.xml { render :xml => @comment } 
    end 

должен быть таким:

def show 
    @comment = Comment.find(params[:id]) 
    @activities = PublicActivity::Activity.order("created_at DESC").where(trackable_type: "Comment", trackable_id: @comment).all 
    respond_to do |format| 
     format.html # show.html.erb 
     format.xml { render :xml => @comment } 
    end 
    end 

(сейчас она «падает» в создании действия таким образом, создать действие никогда не устанавливается).

Вы тогда, вероятно, необходимо изменить окончательный:

end 
    end 
    end 
end 

быть

end 
    end 
end 

, как это было, вероятно, «компенсируя» за несоответствие и позволяя страницы прекомпилировать в Ruby.

+1

+1, сделав отступ от кода последовательным, сразу продемонстрировал бы проблему. – sevenseacat

+0

Большое вам спасибо за ответ. Я определенно узнал от этой ошибки новобранец! Я получаю новую ошибку (не могу найти работу без идентификатора), но это решило проблему, которую я опубликовал. Я приближаюсь! – winston

Смежные вопросы