undefined method 'comments' for nil:NilClass
当我尝试创建新评论(多态关系)时,我不断在我的 create 方法中得到一个。我已经浏览了有关此的其他几个问题,但似乎无法找到我的表单/控制器有什么问题。
这是我的通用部分评论:
<%= form_for [@commentable, Comment.new] do |f| %>
<%= f.text_area :content %>
<%= f.submit "Post" %>
<% end %>
请注意,这是在我的 traveldeal/show 页面中呈现的。表单呈现良好。如果我更改 form_for 以传递参数[@commentable, @comment]
,我会得到undefined method
NilClass:Class 的错误 model_name'
路线.rb
resources :users
resources :traveldeals
resources :traveldeals do
resources :comments
end
resources :users do
resources :comments
end
Railscasts 将上述内容写为resources :traveldeals, :has_many => :comments
,但我相信这是过时的语法。
评论控制器.rb
class CommentsController < ApplicationController
before_filter :authenticate, :only => [:create, :destroy]
def new
@comment = Comment.new
end
def create
@commentable = find_commentable
@comment = @commentable.comments.build(params[:comment])
@comment.user_id = current_user.id
if @comment.save
flash[:success] = "Successfully saved comment."
redirect_to root_path
else
redirect_to current_user
end
end
private
def find_commentable
params.each do |name, value|
if name =~ /(.+)_id$/
return $1.classify.constantize.find(value)
end
end
nil
end
end
编辑:添加了解决方案,因此上面的代码对我有用。