我一直在删除文章的评论。我能够显示和编辑注释,但无法删除它们。我尝试了各种组合,并通过网络搜索,但可以找到合适的答案。我在comments / _comment.html.erb partial中添加了“删除”链接。
评论/ _comment.html.erv
<% if @article.comments.count >= 1 %>
<div style="border: px solid #66c9ee;border-radius: 0px 0px 0px 0px;margin: 10px -30px 15px; padding: 10px 15px 25px; background: none repeat scroll 0 0 #F2F2F2; width:700px; font-size: 1.2em;border-bottom: 0px solid #DDDDDD;">
<%= comment.content %>
<div id="tabula">
<ul id="tabula">
<li> <div style="color: #0077CC;margin-rigth:200px; font-size: 1.0em;margin-top:4px;background-color:#;"> <%= comment.user.username if comment.user %></div></li>
<li> <div style="color: #0077CC; background-color:; margin-top:4px; margin-left:25px;"> <p> <%= time_ago_in_words(comment.created_at.in_time_zone("Asia/Calcutta")) unless comment.created_at.nil? %> </p></div></li>
<li> <div style="color: #0077CC; background-color:; margin-top:4px; margin-left:25px;"> <%= link_to "edit", edit_article_comment_path(@article ,comment) %> </div></li>
<li> <div style="color: #0077CC; background-color:; margin-top:4px; margin-left:25px;"> <%= link_to 'Delete', article_comment_path(@article,comment), :confirm => 'Are you sure?', :method => :delete %> </div></li>
</ul>
</div>
<% else %>
<div style="color:#0077CC;margin-left:25px;font-size:1.4em;"> be first to comment</div>
<% end %>
comments_articles.rb
class CommentsController < ApplicationController
def new
@comment = Comment.new
end
def create
@article = Article.find(params[:article_id])
@comment = @article.comments.build(params[:comment])
@comment.user_id = current_user.id
@comment.save
flash[:success] = "Comment created!"
redirect_to article_path(@comment.article)
end
def edit
@comment = Comment.find(params[:id])
@article = @comment.article
# @article = Article.find(params[:article_id])
#@comment = @article.comments
end
def update
@comment = Comment.find(params[:id])
@article = @comment.article
if @comment.update_attributes(params[:comment])
flash[:success] = "Comment updated!"
redirect_to article_path(@article)
else
render :action => "edit"
end
end
def destroy
@article = Article.find(params[:article_id])
@comment = @article.comments.find(params[:id])
@comment.destroy
redirect_to article_path(@artilce)
end
end
佣金路线
articles GET /articles(.:format) articles#index
POST /articles(.:format) articles#create
new_article GET /articles/new(.:format) articles#new
edit_article GET /articles/:id/edit(.:format) articles#edit
article GET /articles/:id(.:format) articles#show
PUT /articles/:id(.:format) articles#update
DELETE /articles/:id(.:format) articles#destroy
dashboard_index GET /dashboard(.:format) dashboard#index
POST /dashboard(.:format) dashboard#create
new_dashboard GET /dashboard/new(.:format) dashboard#new
edit_dashboard GET /dashboard/:id/edit(.:format) dashboard#edit
dashboard GET /dashboard/:id(.:format) dashboard#show
PUT /dashboard/:id(.:format) dashboard#update
DELETE /dashboard/:id(.:format) dashboard#destroy
tags GET /tags(.:format) tags#index
POST /tags(.:format) tags#create
new_tag GET /tags/new(.:format) tags#new
edit_tag GET /tags/:id/edit(.:format) tags#edit
tag GET /tags/:id(.:format) tags#show
PUT /tags/:id(.:format) tags#update
DELETE /tags/:id(.:format) tags#destroy
comments GET /comments(.:format) comments#index
POST /comments(.:format) comments#create
new_comment GET /comments/new(.:format) comments#new
edit_comment GET /comments/:id/edit(.:format) comments#edit
comment GET /comments/:id(.:format) comments#show
PUT /comments/:id(.:format) comments#update
DELETE /comments/:id(.:format) comments#destroy
article_comments GET /articles/:article_id/comments(.:format) comments#index
POST /articles/:article_id/comments(.:format) comments#create
new_article_comment GET /articles/:article_id/comments/new(.:format) comments#new
edit_article_comment GET /articles/:article_id/comments/:id/edit(.:format) comments#edit
article_comment GET /articles/:article_id/comments/:id(.:format) comments#show
PUT /articles/:article_id/comments/:id(.:format) comments#update
DELETE /articles/:article_id/comments/:id(.:format) comments#destroy
GET /articles(.:format) articles#index
POST /articles(.:format) articles#create
GET /articles/new(.:format) articles#new
GET /articles/:id/edit(.:format) articles#edit
GET /articles/:id(.:format) articles#show
PUT /articles/:id(.:format) articles#update
DELETE /articles/:id(.:format) articles#destroy
articles_controller.rb
class ArticlesController < ApplicationController
before_filter :is_user_admin, only: [:new, :create, :edit, :destroy]
before_filter :log_impression, :only=> [:show]
def is_user_admin
redirect_to(action: :index) unless current_user.try(:is_admin?)
return false
end
def log_impression
@article = Article.find(params[:id])
# this assumes you have a current_user method in your authentication system
@article.impressions.create(ip_address: request.remote_ip,user_id:current_user.id)
end
def index
@articles = Article.all(:order => "created_at DESC")
@article_titles = Article.first(10)
@tags = Tag.all
end
def show
@article = Article.find(params[:id])
@related_articles = Article.joins(:taggings).where('articles.id != ?', @article.id).where(taggings: { tag_id: @article.tag_ids })
@article_popular = Article.order('articles.impressions_count DESC').limit(5)
end
def new
@article = Article.new
end
def create
@article = Article.new(params[:article])
@article.user_id = current_user.id
if @article.save
flash[:success] = "article created!"
redirect_to article_path(@article)
else
render 'new'
end
end
def destroy
@article = Article.find(params[:id])
@article.destroy
redirect_to action: 'index'
end
def edit
@article = Article.find(params[:id])
end
def update
@article = Article.find(params[:id])
if @article.update_attributes(params[:article])
flash.notice = "Article '#{@article.title}' Updated!"
redirect_to article_path(@article)
else
render 'edit'
end
end
end
物品/ show.html.erb
<div class="row-fluid">
<div class="span12">
<div class ="span9">
<div class ="row-fluid">
<div id="upperborder">
<div id="lowerborder">
<div style="color:#1fb2e8;font-size:2.3em;"><%= @article.title %></div>
<div id="tabs">
<ul id="tabs">
<li> <%= time_tag(@article.created_at.in_time_zone("Asia/Calcutta")) %> </li>
<li> <%= @article.user.username if @article.user %></li>
<li>
<% unless @article.comments.empty? %>
(<%= @article.comments.size %>) comments
<% end %>
</li>
<li>
<% @article.tags.each do |tag| %>
<%= link_to tag.name, tag_path(tag) %>
<% end %>
</li>
</ul>
</div>
<hr id="upperline">
<div style="font-size: 1.2em"><%= @article.body %></div>
<div id="tabs">
<ul id="tabs">
<div style="margin-top:20px; margin-left:10px"> <li> <%= link_to "back",articles_path, :class => '' %></li></div>
<% if current_user.try (:is_admin) %>
<div style="margin-top:20px;margin-left:-10px""> <li> <%= link_to "edit", edit_article_path(@article), :class => '' %></li> </div>
<div style="margin-top:20px"> <li> <%= link_to "delete",article_path(@article),:method => :delete,:confirm => 'Are you sure?',:class => '' %></li> </div>
<% end %>
</ul>
</div>
<div id="fabs">
<ul id="fabula">
<div style="margin-left:250px; font-size:1.2em;color:#1fb2e8;margin-top:-0px"> Viewed: <%=@article.impression_count %> times,
<% if (@article.created_at != @article.updated_at) %>
edit: <%= time_ago_in_words(@article.updated_at) %> ago,
<% end %>
<% if ! @article.comments.empty? %>
Active: <%= time_ago_in_words(@article.comments.last.created_at) %> ago
<% end %>
</div>
</ul>
</div>
<hr style="border: 1px solid #E0E0F0; margin-top:50px">
<div id="commentform">
<%= render :partial => 'comments/comment_form' %>
<% @article.comments.each do |c| %>
<% if !c.nil? %>
<div id ="commentdisplay"> <%= render partial: 'comments/comment', :locals => { :comment => c } %> </div>
<% end %>
<% end %>
</div>
</div>
</div>
</div>
<div class="span3">
<div id="popular">
<% if !@article_popular.empty? %>
<div id="headerpopular"> most viewed articles </div>
<% @article_popular.each do |article_popular| %>
<div id="popular-title"> <%= link_to truncate(article_popular.title, :length => 35, :separator => ' '), article_path(article_popular) %></div>
<% end %>
<% end %>
</div>
</div>
</div>
<% if !@related_articles.empty? %>
<div id = "related-border">
<div id="related-title"> Related articles </div>
<% @related_articles.each do | related_article | %>
<div id="related-title-link"> <%= link_to truncate(related_article.title, :length => 35, :separator => ' '), article_path(related_article) %></div>
<% end %>
</div>
<% else %>
<div id="related-border">
<div id="ygm"> You got us ! </div>
<div id="nofound"><h3> no related article found :(</h3></div>
</div>
<% end %>
当我点击“删除”链接时,它说没有路由匹配{:action =&gt;“show”,:controller =&gt;“articles”,:id =&gt; nil}。我不知道,为什么它是指向ot文章控制器。我在这里使用了嵌套路由,而评论的网址是http://localhost:3000/articles/43/comments/49
例如。文章的所有评论都显示在artilce的显示页面上。如果你在这里了解更多信息,请告诉我。
答案 0 :(得分:2)
您的CommentsController#destroy
行动中有错字:
redirect_to article_path( @artilce )
应该是
redirect_to article_path( @article )
(注意@artilce
)
所以我猜你的破坏行为有效,但重定向不会因为@artilce
返回nil
(因此奇怪的错误消息)。
答案 1 :(得分:0)
更改
<%= link_to 'Delete', article_comment_path(@article,comment), :confirm => 'Are you sure?', :method => :delete %>
到
<%= link_to 'Destroy Comment', [comment.article, comment], :confirm => 'Are you sure?', :method => :delete %>
您可以获得更多信息:http://guides.rubyonrails.org/getting_started.html#deleting-comments