我的网站能够让用户成功发布顶级评论,但我对评论儿童有很多麻烦。我正在使用多态关联,因此注释模型可以应用于文章,配置文件和图片。在这三种情况中,评论都会将模型视为“可评论”。
我想在每个评论旁边创建一个回复链接,该回复链接将该特定评论的“id”传递到评论“新”视图页面。然后我希望注释“create”方法使用该id,@ top_level_comment = Comment.find(id),并使用用户在“new”注释视图中指定的参数创建一个新子项,@ top_level_comment.children.create (params [:comment]),但我不知道如何把它放到代码中。
因此,用户将从文章显示页面开始,该页面具有以下控制器:
def show
@article = Article.find(params[:id])
@commentable = Article.find(params[:id])
@comments = @commentable.comments
@comment = Comment.new
@title = @article.title
end
然后,他将向下滚动到底部的评论,并通过文章显示页面看到有回复链接:
<div id="comment <%= comment.id %>">
<%= comment.title %>
| <%= link_to "Permalink", polymorphic_path([@commentable, comment]), :action => :show %>
| <%= link_to "Reply", polymorphic_path([@commentable, @comment]), :action => :new %>
| <%= link_to "Edit Comment", polymorphic_path([@commentable, comment]), :action => :edit %>
| <%= link_to 'Delete Comment', [[@commentable, comment]], :confirm => "Are you sure?", :method => :delete %><br />
<%= comment.content %><br />
<%= comment.user.name %><br />
<%= @comment.children.count %><br /><br />
<%= render :partial => 'shared/comment', :collection => @comment.children %>
</div>
特别是在遇到问题的时候,这就是这条线:
| &lt;%= link_to“Reply”,polymorphic_path([@ commentable,@ comment]),:action =&gt; :new%&gt;
如何根据此帖子顶部的说明更改此操作以执行我想要执行的操作?多态路径不起作用。我认为它不起作用,因为可评论仅适用于文章,个人资料和图片,但不适用于评论。如何更改路径,以便在传递当前注释的id(comment.id)时转到注释“new”页面?
另外,我添加新评论的表单如下所示:
<%= form_for([@commentable, @comment]) do |f| %>
<%#= render 'shared/error_messages', :object => f.object %>
<div class="field">
<%= f.label :title %><br />
<%= f.text_field :title %>
</div>
<div class="field">
<%= f.label :content %><br />
<%= f.text_area :content %>
</div>
<div class="actions">
<%= f.submit "Post Comment" %>
</div>
<% end %>
这是路由的样子:
resources :articles do
resources :comments
end
您好,当我按照标记的路由时,我在尝试查看文章时得到了这个:
No route matches {:controller=>"comments", :action=>"create", :article_id=>#<Article id: 300, title: "Filler Title", content: "Sunt sit est incidunt et.", user_id: 6, created_at: "2010-09-08 17:42:10", updated_at: "2010-09-08 17:42:10">}
在太平洋标准时间9月16日3:48添加了以下新信息:
这是允许用户对可评论进行评论的表单,但是当@commentable是评论时它不起作用。
1: <%= form_for([@commentable, @comment]) do |f| %>
2: <%#= render 'shared/error_messages', :object => f.object %>
3: <div class="field">
4: <%= f.label :title %><br />
评论控制器“新”
def new
@commentable = find_commentable
@comment = Comment.new
end
在回复评论时,它会转到上面,但它不知道@commentable是什么,因此在回复评论时其值为nil。如何使@commentable成为用户按下回复的@comment?以下是允许用户回复评论的链接:
| <%= link_to "Reply", new_comment_path(comment.children.new) %>
非常感谢。
答案 0 :(得分:1)
当然,如果你使用注释的多态关系,你应该在注释和注释之间定义一个自引用的多态关系,即。评论有许多评论可评论。
然后这个:
<%= link_to "Reply", [@comment, @comment.comments.new] %>
#routes.rb
map.resources :comments, :articles, :profiles, :pictures do |commentable|
commentable.resources :comments, :only => [:new, :create]
end