Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

edit link does not work for editing comments in ruby on rails blog

I am trying to implement edit comment functionality in blog. I am able to create comments on an article and displaying them. When I click "Edit" link for an particular comment of an article, it takes me edit comment form but it does not contains any content. Like when we edit any comment or question on stack overflow, it takes us to edit page with content. But in my case , it takes me to edit page of comment but it is empty( does not contain content of comment). Following is my code files.

comments_controller.rb

    class CommentsController < ApplicationController
         before_filter :user_signed_in, except: [:create]
        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])
        end

        def update
         @comment = Comment.find(params[:id])
         @article = @comment.article
         respond_to do |format|
          if @comment.update_attributes(params[:comment])
            redirect_to @article_path(@article)
          else
           render :action => "edit" 
          end
        end

        def destroy
         @comment = Comment.find(params[:id])
        @article = Article.find(params[:article_id])
        @comment.destroy
           redirect_to @article_path(@artilce) 
        end

    end

comments/edit.html.erb

    <h3>Editing comment</h3>
    <%= render :partial => 'comment_form' %>

comments/_comment_form.html.erb

<%= form_for ([@article, Comment.new]) do |f| %>
 <%= f.text_area :content, :style => "width:727px; height:100px; border: 1px solid #999999;margin-top:80px; background-color:#FFFFFF;margin-left:-33px" %>
     <div class="actions">
     <%= f.submit "Add Comment", :style => "margin-right:20px; margin-left:560px; background-color:#66C9Ef; color:#FFFFFF; border: 0px solid #82b548; border-radius: 3px 3px 3px 3px; font-size: 1.3rem;" %>
  </div>
<% end %>

comments/_comment.html.erb ( here i have given link for editing comments for an article)

      <% 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>
            </ul>
           </div>
    <% else %>
        <div style="color:#0077CC;margin-left:25px;font-size:1.4em;"> be first to comment</div>
  <% end %>

rake routes result.(not complete)

            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
        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

routes.rb

    Mau::Application.routes.draw do
      devise_for :users
      root :to => 'articles#index'
      resources :articles
      resources :dashboard
      resources :tags
      resources :articles do
      resources :comments
    end
    end

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

articles/show.html.erb (this is only relevant code of show)

 <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> 
like image 656
Vieenay Siingh Avatar asked Apr 24 '13 17:04

Vieenay Siingh


1 Answers

form_for ([@article, Comment.new])

should be

form_for ([@article, @comment])

in comments/_comment_form.html.erb

like image 152
Pritesh Jain Avatar answered Oct 07 '22 00:10

Pritesh Jain