所以我现在已经坚持了一个小时左右。我遇到的问题是没有得到“Tour.id”。但是,如果我这样做:
commentable = Tour.find(1)
comment = commentable.comments.create
它使用正确的commentable_id和commentable_type保存。
以下是事情的展望:
show.html.erb
<%= form_for [@tour, @comment] do |f| %>
<%= f.text_area :comment %>
<% end %>
tours_controller.rb
@tour = Tour.find(params[:id])
@comment = @tour.comments.new
comments_controller.rb
@commentable = @tour
@comment = @commentable.comments.create
的routes.rb
resources :tours do
resources :comments
member do
put :submitreview
end
end
导致: CommentsController中的NoMethodError #create nil的未定义方法`comments':NilClass
请求
参数:
{"utf8"=>"✓",
"authenticity_token"=>"mxHD+yj6PKG4gCrYuGrwKEKWHOofCaoE4G7bAoEs6J4=",
"comment"=>{"comment"=>"okokok"},
"commit"=>"Create Comment",
"tour_id"=>"1"}
我在这里做错了什么?!
答案 0 :(得分:0)
在评论控制器的操作中,您没有为@tour
分配任何值,因此它为零。然后在下一行中调用comments
。这就是你得到这个错误的原因。