Вопрос

Я пытаюсь следовать Скриншот Райана Бейтса но есть сообщение об ошибке.Я сделал следующее:

1) Создать таблицу

class CreateComments < ActiveRecord::Migration
  def self.up
    create_table :comments do |t|
      t.references :commentable, :polymorphic => true

2) Настройка моделей

class Comment < ActiveRecord::Base
  belongs_to :commentable, :polymorphic => true

class Product < ActiveRecord::Base
  has_and_belongs_to_many :categories
  has_many :comments, :as => :commentable

class Category < ActiveRecord::Base
  has_and_belongs_to_many :products
  has_many :comments, :as => :commentable

3) Изменить действие дисплея контроллера

class CategoriesController < ApplicationController
  def show
    @category = Category.find_by_permalink(params[:id])
    @commentable = @category
    @comment = Comment.new(:commentable => @category)
  end

4) Добавьте форму в шаблонviews/categories/show.html.erb.

<% form_for [@commentable, Comment.new] do |f| %>
  <p>
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  </p>
  <p>
    <%= f.label :content %><br />
    <%= f.text_area :content %>
  </p>
  <p>
    <%= f.submit 'Submit' %>
  </p>
<% end %>

5) После этого я получаю сообщение об ошибке при доступе к /categories/my-category-permalink.

NoMethodError in Categories#show
undefined method `category_comments_path' for #<ActionView::Base:0x69a9254>

Не могли бы вы помочь мне понять, что я сделал не так?В оригинальном скринкасте Райан обращается к комментариям /categories/permalink/comments, используя вложенные ассоциации, но мне это не нужно.Я хочу писать комментарии прямо из своих полиморфных объектов.Спасибо

Это было полезно?

Решение

Проблема была в настройках маршрутов.Я подумал, что, поскольку я не использую вложенные ресурсы, я могу сохранить маршруты без изменений.Ну, теперь я знаю, что был не прав...:) Добавьте это, чтобы решить проблему:

map.resources :categories :has_many => :comments
map.resources :products, :has_many => :comments
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top