我正在尝试创建一条可以对其他评论发表评论的评论,但这些评论都来自一篇文章。
对我来说特别令人不安的是试图弄清楚如何制作它以便在后期节目中实现这一切,而不是编辑或新的。这架式建筑是否合理?
这样我可以通过Post.comments
或Comment.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'
但这样做似乎是必要的。
答案 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