2013-04-24 14 views
7

Sto cercando di implementare la funzionalità di modifica dei commenti nel blog. Sono in grado di creare commenti su un articolo e visualizzarli. Quando faccio clic sul link "Modifica" per un particolare commento di un articolo, mi viene richiesto di modificare il modulo di commento ma non contiene alcun contenuto. Come quando modifichiamo qualsiasi commento o domanda sullo stack overflow, ci porta a modificare la pagina con il contenuto. Ma nel mio caso, mi serve per modificare la pagina del commento ma è vuota (non contiene il contenuto del commento). Di seguito sono i miei file di codice.modifica link non funziona per la modifica dei commenti in ruby ​​on rails blog

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 

commenti/edit.html.erb

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

commenti/_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 %> 

commenti/_comment.html.erb (qui ho dato il link per la modifica dei commenti per un articolo)

 <% 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 risultato. (Non completa)

  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 

articoli/show.html.erb (questo è solo codice di riferimento rilevante)

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

suo perché si sta utilizzando 'Comment.new' (ie)' form_for ([@article, Commento. nuovo]) do | f | 'prova' form_for ([@article, @comment]) do | f | ' – codeit

+0

hi codeit, ho provato con il tuo suggerimento ma ora ottengo NoMethodError negli articoli # show Visualizzazione f:/kuta /billi/app/views/comments/_comment_form.html.erb dove la riga n. 1 è stata sollevata: metodo non definito 'nome_modello 'per NilClass: Classe. qualche suggerimento. –

+0

Nell'azione 'edit' aggiungi' @article = @ comment.article' – codeit

risposta

2
form_for ([@article, Comment.new]) 

dovrebbe essere

form_for ([@article, @comment]) 

nei commenti/_comment_form.html.erb

+1

hi PriteshJ, ho provato con il tuo suggerimento, ma ora ho sempre NoMethodError agli articoli # mostro Visualizzazione f: /kuta/billi/app/views/comments/_comment_form.html.erb dove la linea # 1 ha generato: metodo non definito ' model_name 'per NilClass: Class. qualche suggerimento. –

+0

@VSiingh aggiungi i tuoi articoli/mostra i file da cui il file dei commenti è chiamato – PriteshJ

+0

hi PriteshJ, ho aggiunto articoli/show.html.erb. è solo un codice rilevante, se ne hai bisogno di più. Per favore mi faccia sapere. –