Я работаю над приложением, которое позволяет пользователям прокомментировать одну «работу» (думаю, сообщение в блоге). Ассоциации в модели заключаются в следующем:Неизвестно Действие: Действие «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 на контроллере комментариев? Любая помощь будет принята с благодарностью.
Спасибо!
+1, сделав отступ от кода последовательным, сразу продемонстрировал бы проблему. – sevenseacat
Большое вам спасибо за ответ. Я определенно узнал от этой ошибки новобранец! Я получаю новую ошибку (не могу найти работу без идентификатора), но это решило проблему, которую я опубликовал. Я приближаюсь! – winston