我正在关注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
有一点与演员表不同,我的routes.db有:
resources :articles do
resources :comments
end
而不是:
resources :articles, :has_many => :comments
如果我不这样做,我会收到路线错误。
知道为什么吗?我知道指南有点旧,我在Rails 3上。
答案 0 :(得分:0)
您尚未在此“新”操作中分配@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
答案 1 :(得分:0)
看起来Rails不喜欢多态和嵌套路由的组合。我不能保证它会起作用,但试试这个:
<%= form_for([@commentable, @comment], :url => new_polymorphic_url([@commentable, @comment])) do |f| %>
编辑:你错过了Rishav提到的@commentable初始化,所以先试试。
答案 2 :(得分:0)
另外,我发现在每个注释控制器方法中都使用“@commentable = find_commentable”。无论如何都要声明它一次,并允许所有方法拥有它吗?