2012-03-01 3 views
1

Я использую полиморфную ассоциацию.ошибка полиморфной ассоциации

У меня есть 2 модели статей и событий, которые имеют has_many ассоциации с комментариями модели с использованием полиморфного ассоциации

Внутри комментарии контроллер:

def index 

    @commentable = find_commentable 

    @comments = @commentable.comments 

end 

def find_commentable 

    params.each do |name, value| 

    if name =~ /(.+)_id$/ 

     return $1.classify.constantize.find(value) 

    end 

    end 

    nil 

end 

Внутри статьи и события модели я писал:

has_many :comments, :as => :commentable,:dependent => :destroy 

Внутренние комментарии модель:

Внутренние маршруты:

resources :articles do 
resources :comments 

end 

моя проблема заключается в том

1) Когда я вхожу http://localhost:3003/articles/8/comments он выдает следующее сообщение об ошибке:

undefined method `comments' for nil:NilClass 

2) Кроме того, я не хочу, чтобы использовать вложенные маршруты , Я хочу использовать простые маршруты. Как я могу достичь того же, что и этот код?

ответ

0
  1. Вы получаете эту ошибку, поскольку @commentable - это нуль. У вас есть статья с идентификатором 8? Функция find_commentable возвращает корректный комментарий? Я думаю, что ответ на один из этих двух вопросов - «нет».

  2. Если вы не хотите вложенных маршрутов, вы можете просто сделать resources :comments, но вы должны быть уверены, что вы передадите commentable_type и commentable_id в качестве параметров для контроллера; иначе вы не сможете найти класс комментария, чтобы получить его комментарии.

+0

есть статья с идентификатором 8 .... я думаю find_commentable функция не возвращает commentable правильно ... но у меня есть еще 1 сомнения, вэнь я нажимаю комментарии ссылки он идет к индексу действию, а затем find_commentable функция, когда эта функция выполняется, что входит в params и name, значение в этой строке params.each do | name, value | внутри этой функции – Nikita