2014-09-17 2 views
1

В моем комментарии контроллера, У меня есть следующиеactions_as_commentable_with_threading - метод «build_from» не работает?

класса CommentsController < ApplicationController

def create 
    @comment_hash = params[:comment] 
    #@comment = comment.new(comment_params) 
    @obj = @comment_hash[:commentable_type].constantize.find(@comment_hash[:commentable_id])  
    @comment = Comment.build_from(@obj, current_user.id, @comment_hash[:body]) 
    binding.pry 
    #... 

В точке, где binding.pry есть,

@comments_hash является

{"body=>"asdf comment body", 
"commentable_type"=>"Hack", 
"commentable_id"=>"2"} 

@obj является

#<Hack id: 2, created_at: "2014-09-16 00:00:00", 
updated_at: "2014-09-16 00:00:00", 
body: "some text", 
user_id: 1, 
comment_threads_count: 0> 

Но @comment выходы

#<Comment id: nil, 
commentable_id: 2, 
commentable_type: "Hack", 
title: nil, body: "asdf, 
comment body", 
subject: nil, 
user_id: 1, 
parent_id: nil, 
lfg: nil, rgt: 
nil, created_at: nil, 
updated_at: nil> 

Почему так много вещей, NIL здесь? Все мои аргументы для метода build_from идентичны ранее, когда код работал правильно.

терминал выводится при попытке вызова @comment.save является

undefined method 'user' for #<Comment:0x5d1b1b0> 

Я не уверен, что это значит. У меня есть ассоциация user_id. Я не вижу параметр пользователя в моем параметре hash.

Любая помощь будет высоко оценена.

+1

Опубликовать свою модель «Комментарий». – Substantial

ответ

0

@ Существенное Ваше подозрение было верным.

Несмотря на то, что ассоциации, созданные с помощью метода act_as_commentable_with_threading, мне все равно пришлось связать has_manybelongs_to между пользователем и комментарием. Как только я добавил отношения has_manybelongs_to, все получилось. (и когда я снова удалил его, он перестал работать).

acts_as_commentable_with_threading в пользовательской модели предназначен для размещения комментариев к пользователю, не указав, что комментарий принадлежит пользователю. Так что если вы хотите, чтобы отправлять комментарии на пользователей, вам необходимо как этот метод, и has_many :comments & belongs_to :user в комментарии модели

Если вы хотите просто комментарии на другую модель, поставить метод в этой модели, и поставить has_many :comments в потребителе модель и belongs_to :user в комментарии модели