記事のコメントの削除に行き詰まりました。コメントの表示と編集はできますが、削除できません。いろいろ組み合わせてみたり、ネットで検索したりしましたが、適当な答えが見つかりました。私はコメント/_comment.html.erb部分に「削除」リンクを入れました。
コメント/_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 %>
コメント_記事.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
article_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=>"show", :controller=>"articles", :id=>nil} と表示されます. I don't know , why It is pointing ot Articles Controller. Iここではネストされたルーティングを使用しており、コメントの URL はhttp://localhost:3000/articles/43/comments/49
例です. 記事のすべてのコメントは記事の表示ページに表示されます. ここで詳細を知っている場合はお知らせください.