2011-08-17 42 views
2

我在構建註釋表單時遇到問題,我正在通過'commentable'使用多態關係。能夠顯示評論現在(如果我種他們),所以我認爲我真的很接近。評論表格也顯示,但是當我去提交失敗。Rails 3 - 「未定義的方法'comments_path'使用可評論的多態關聯構建註釋的錯誤

我發送到「/評論」我得到以下錯誤:

NoMethodError in CommentsController#create 

undefined method `comments' for nil:NilClass 

Application Trace 
app/controllers/comments_controller.rb:5:in `create' ( @comment = @commentable.comments.build(params[:comment])) 

**首先,爲什麼它送我去「/評論」 ??這看起來不正確

下面是相關的代碼,讓我知道如果你需要更多。

機型:

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

    default_scope :order => 'comments.created_at DESC' 
end 

class Track < ActiveRecord::Base 

    has_many :comments, :as => :commentable 
    ... 
end 

視圖(註釋/表格) - 這是隨後在軌#呈現爲局部顯示

<% form_for [@commentable, @comment] do |f| %> 
    <%= f.error_messages %> 

    <p> 
    <%= f.label :name %><br /> 
    <%= f.text_area :name %> 
    </p> 

    <p> 
    <%= f.label :body %><br /> 
    <%= f.text_area :body %> 
    </p> 

    <p><%= f.submit "Submit" %></p> 
<% end %> 

評論控制器:

def create 
    @commentable = find_commentable 
    @comment = @commentable.comments.build(params[:comment]) 
    if @comment.save 
    flash[:notice] = "Successfully saved comment." 
    redirect_to :id => nil 
    else 
    render :action => 'new' 
    end 
end 

def new 
    @comment = Comment.new 
end 

private 

def find_commentable 
    params.each do |name, value| 
    if name =~ /(.+)_id$/ 
     return $1.classify.constantize.find(value) 
    end 
    end 
    nil 
end 

路線:

resources :tracks, :has_many => :comments 
resources :comments 

這是我的第一篇文章,讓我知道如果我可以改善這個問題!非常感謝。

回答

0

我在這段代碼中看不到任何錯誤。我想,你忘記在某處設置@track@commentable變量,你可以在其中調用註釋。

嘗試檢查應用程序錯誤跟蹤以查看發生的情況。

+0

去...? ;) – socjopata

+0

好吧,哇解決了它。如果還有一些工作要做,我會檢查這個答案,甚至是...如果我在曲目控制器中添加了@ commentable'來顯示。然而,這給了我一個沒有路線的錯誤,我終於通過改變route.rb來修復'資源:軌道做' '資源:評論' '結束' – tuddy

+0

我很高興你解決了它:)乾杯! – socjopata

相關問題