2015-02-12 3 views
0

Я пытаюсь создать форму комментариев на моей странице коллекции. Я немного ржавый с Rails, и я не знаю, почему эта форма не пытается создать комментарий, и вместо возвращения ошибкаRails ищет обновления, когда он должен быть создан.

Действие «обновление» не может быть найдено для CommentsController

Система комментариев работает в консоли.

Вот моя форма

<%= form_for [@commentable, @comment] do |f| %> 
    <%= render 'shared/error_messages', object: f.object %> 
    <%= f.text_area :content %> 
    <%= f.submit "Comment", class: "btn btn-large btn" %> 
    <% end %> 

Мой комментарий модель

class Comment < ActiveRecord::Base 
    belongs_to :commentable, polymorphic: true 
    belongs_to :user 
end 

Моя коллекция модель

class Collection < ActiveRecord::Base 
    has_many :comments, as: :commentable 
end 

Мой comments_controller

class CommentsController < ApplicationController 

    def create 
    @comment = @commentable.comments.new(comment_params) 
    if @comment.save 
     flash[:success] = 'Comment posted!' 
     redirect_to @commentable 
    else 
     flash[:notice] = "Error creating comment: #{@comment.errors}" 
     redirect_to @commentable 
    end 
    end 

    private 
    def comment_params 
     params.require(:comment).permit(:content, :commentable_type, :commentable_id, :user_id) 
    end 
end 

Мой collections_controller показать действие

def show 
    @collection = Collection.find(params[:id]) 
    @commentable = @collection 
    @comments = @commentable.comments 
    @comment = Comment.new if user_signed_in? 
end 
+1

опечатка @commentable в вашей форме :) – trosborn

+0

Спасибо. Хорошее место. К сожалению, все не исправлено, но это, безусловно, сломает его, если он работает :) – Ossie

ответ

1

Вы не используете @commentable в форму или контроллер, который может быть причиной вашей проблемы:

<%= form_for [@commentable, @comment] do |f| %> 

И ваше действие контроллера должно выглядеть следующим образом:

def create 
    @comment = @commentable.comments.new(comment_params) 

Update: После загрузки commentable на основе ресурса:

before_filter: load_commentable 

def load_commentable 
    resource, id = request.path.split('/')[1, 2] 
    @commentable = resource.singularize.classify.constantize.find(id) 
end 

Метод любезно Райан Бейтс: http://railscasts.com/episodes/154-polymorphic-association-revised

+0

Это имеет смысл. Я вижу, что я должен использовать @commentable. Благодарю. Я все равно получаю ту же ошибку. Я не понимаю, почему он пытается обновить, а не создавать. – Ossie

+0

В настоящее время создается пустой комментарий при загрузке страницы просмотра. Я такой ржавый. Много извинений. – Ossie

+1

YESS! Мне не хватало бит load_commentable. Не обращая достаточно пристального внимания на Райана Бейтса, это всегда верный путь к неудаче. Спасибо, что так орел. Довольно много работы сейчас, просто нужно пройти в user_id, и это идеально. Спасибо. – Ossie

1

Можете ли вы показать действие контроллера, который визуализирует, что формы? Я думаю, проблема в том, что @comment уже сохранен/создан, поэтому он пытается его обновить.

UPDATE:

Я просто заметил ваше шоу действий. Да, проблема в том, что @comment уже сохраняется. Просто измените его:

@comment = Comment.new if user_signed_in?

+0

Кажется, что эта проблема прошла, но теперь у меня есть «неопределенный метод' comments »для nil: NilClass для моего действия Create. – Ossie

+1

'current_user' равно нулю. Можете ли вы показать определение 'current_user'? – JCorcuera

+0

Я взял это и отредактировал его после другого ответа. Теперь нет ссылки на current_user. Я думаю, проблема в том, что я не передаю @commentable. – Ossie

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