你如何用多态表创建一个表单?

时间:2010-10-14 22:40:31

标签: ruby-on-rails forms nested nested-forms

我正在尝试创建一条可以对其他评论发表评论的评论,但这些评论都来自一篇文章。

对我来说特别令人不安的是试图弄清楚如何制作它以便在后期节目中实现这一切,而不是编辑或新的。这架式建筑是否合理?

这样我可以通过Post.commentsComment.comments等或Comments.parent

访问它

我的模特:

#comment.rb

  belongs_to  :post
  belongs_to  :parent, :class_name => 'Comment'
  has_many    :children, :class_name => 'Comment'

  validates_presence_of :text

#post.rb

  has_many                      :comments
  accepts_nested_attributes_for :comments

posts_controller

def show
  @post = Post.find(params[:id])


  respond_to do |format|
    format.html # show.html.erb
    format.xml  { render :xml => @post }
  end
end

的routes.rb

resource :comments

我的评论表中包含:text:post_id属性。虽然我认为它不需要:post_id

我的表格应该是什么样的,它应该在哪里?

这是我糟糕的尝试:

  - form_for @post do |f|
    - f.fields_for :comments do |c|
      = f.label 'Comments'
      = f.text_area :text
      = f.submit 'Submit'

但这样做似乎是必要的。

1 个答案:

答案 0 :(得分:1)

完成此任务的两个关键组成部分是:

因为它在节目中,我需要指定发布的URL:

- form_for @post do |f|
  - f.fields_for :comments, @comment, :url => edit_post_path(@post) do |c|
    = c.label 'Comments'
    = c.text_area :text
    = c.submit 'Submit'

但是我很困惑,因为没有错误,没有文本字段!

那是因为我的控制器没有提到一个。所以我将其添加到def show

@comment = Comment.new
塔达,它现在有效。

完整代码

控制器:

  def show
    @post = Post.find(params[:id])
    @comment = Comment.new

    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @post }
    end
  end