2

我是 Ruby on Rails 的新手,目前我正在尝试创建一个简单的博客平台。我想用acts_as_commentable_with_threading gem 实现评论功能。我对嵌套表单不太熟悉,但这是我的尝试:

评论控制器.rb

class CommentsController < ApplicationController
  before_filter :get_spot

  # GET /comments/new
  def new
    @comment = Comment.new

    respond_to do |format|
      format.html
    end
  end

  private
    def get_spot
      @spot = Spot.find(params[:spot_id])
    end    
end

_form.html.erb

<%= form_for(@comment) do |f| %>
  ... form elements ...
<% end %>

但它给了我undefined method 'comments_path'错误。我确定我以非常错误的方式做这件事,因为我对示例有点困惑,2.x但是3.x如果您能给我指出一些好的示例,更好的宝石或只是写信告诉我应该如何做,我将非常感激:) 提前致谢!

4

1 回答 1

1

确保您已经为评论控制器设置了路由。

# routes.rb
...
resources :comments
...

更新:

根据下面的评论,这些路线嵌套在帖子下。在这种情况下,您将获得类似“#{RAILS_ROOT}/posts/1/comments”的路线,您可以(http)向其发表评论。但是,您的表单正在尝试发布到“#{RAILS_ROOT}/comments”,因此出现错误。在这种情况下,您需要在 posts/show.html.erb 中添加一个表单构建器:

<p>
  <b>Name:</b>
  <%= @post.name %>
</p>

<p>
  <b>Title:</b>
  <%= @post.title %>
</p>

<p>
  <b>Content:</b>
  <%= @post.content %>
</p>

<h2>Add a comment:</h2>
<%= form_for([@post, @post.comments.build]) do |f| %>
  <div class="field">
    <%= f.label :commenter %><br />
    <%= f.text_field :commenter %>
  </div>
  <div class="field">
    <%= f.label :body %><br />
    <%= f.text_area :body %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

请参阅从中提取此代码的Rails 入门指南。

于 2012-04-27T06:51:27.217 回答