Попытка использовать полиморфные отношения между комментариями и моделями - PullRequest
0 голосов
/ 08 сентября 2010

Я следую руководству Railscasts (http://asciicasts.com/episodes/154-polymorphic-association) для комментирования различных моделей, но у меня возникла проблема.

Когда я пытаюсь перейти на localhost: 3000 / Articles /id / comments / new, я получаю следующую ошибку:

undefined method `comments_path' for #<#<Class:0xb608b40>:0xb607a60>

Это исходит из моей формы комментария:

1: <%= form_for([@commentable, @comment]) do |f| %>
2:   <%#= render 'shared/error_messages', :object => f.object %>
3:   <div class="field">
4:     <%= f.label :title %><br />

Вот содержимое нового метода контроллера комментариев:

  def new
    @comment = Comment.new
  end

Одна вещь, которая отличается от актерского состава, у моего route.db есть это:

  resources :articles do
    resources :comments
  end

вместо этого:

  resources :articles, :has_many => :comments

Я получаюошибка маршрутов, если я не делаю это так.

Есть идеи, почему?Я знаю, что руководство немного старое, и я на Rails 3.

Ответы [ 3 ]

0 голосов
/ 08 сентября 2010

Похоже, Rails не нравится сочетание полиморфных и вложенных маршрутов. Я не могу гарантировать, что это будет работать, но попробуйте это:

<%= form_for([@commentable, @comment], :url => new_polymorphic_url([@commentable, @comment])) do |f| %>

Редактировать: Вам не хватает инициализации @commentable, о которой упоминал Ришав, поэтому попробуйте сначала.

0 голосов
/ 08 сентября 2010

Кроме того, я обнаружил, что использую «@commentable = find_commentable» в каждом методе контроллера комментариев. Есть ли способ объявить это один раз и разрешить всем методам иметь его?

0 голосов
/ 08 сентября 2010

Вы не назначили переменную @commentable в этом вашем "новом" действии

это должно быть что-то вроде

  def new
    # This may need to change as per the class of the commentable field
    @commentable = Article.find(params[:article_id']
    @comment = Comment.new
  end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...