试图在注释和模型之间使用多态关系

时间:2010-09-08 05:08:07

标签: ruby-on-rails

我正在关注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上。

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”。无论如何都要声明它一次,并允许所有方法拥有它吗?