0

我试图允许对嵌套资源发表评论,当我选择创建评论按钮时,我在 app/controllers/comments_controller.rb:7:in 'create' 中得到了一个未定义的方法“comment”。由于我还是 ruby​​ 和 rails 的新手,因此我按照入门指南中的代码进行操作,但似乎无法弄清楚错误的原因。

协会是:

has_many :comments
belongs_to :restaurant

在我的路线中

resources :restaurants do
    resources :comments
 end 

在评论控制器中

def create
    @restaurant = Restaurant.find(params[:restaurant_id])
    @comment = @restaurant.comments.create(params[:comment])
    redirect_to restaurant_path
end

在我的餐厅展示模板中

<%= form_for([@restaurant, @restaurant.comments.build]) do |f| %>
<h2>Add a comment</h2>
  <div>
    <%= f.text_area :body %>
  </div>
  <div>
    <%= f.submit %>
<% end %>
4

1 回答 1

0

您应该在 create 语句的第一行执行以下操作

raise params.to_yaml

您应该会看到类似以下内容

utf8: ✓
authenticity_token: ...
comment: !ruby/hash:ActiveSupport::HashWithIndifferentAccess
  commenter: Test Commenter
  body: Test Comment
commit: Create Comment
action: create
controller: comments
restaurant_id: '1'    

您网站的其余部分应如下所示

评论控制器.rb

def create
  @restaurant = Restaurant.find(params[:restaurant_id])
  @comment = @restaurant.comments.create(params[:comment])
  redirect_to restaurant_path(@restaurant)
end

评论.rb

class Comment < ActiveRecord::Base
 has_many :comments
 belongs_to :restaurant
end

餐厅.rb

class Restaurant < ActiveRecord::Base
 attr_accessible :content, :name, :title
 has_many :comments
end

您可能错过了指南中的一步。其他一切看起来都很好。

于 2013-01-14T07:46:39.473 回答