我正在尝试关注Ryan Bates screencast但有错误消息。我做了以下事情:
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)将表单添加到模板视图/类别/ 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>
你可以帮我理解我做错了什么吗?
在原始的截屏视频中,Ryan使用嵌套关联访问/ categories / permalink / comments的评论,但我不需要。我想直接从我的多态对象中写注释。
感谢
答案 0 :(得分:1)
问题出在路线设置中。我认为既然我不使用嵌套资源,我可以保持路由不变。好吧,现在我知道我错了...... :)添加这个以解决问题:
map.resources :categories :has_many => :comments
map.resources :products, :has_many => :comments