3

コメントの編集機能を追加することを決定するまで、私のアプリは正常に動作していました。以前は特定の記事を表示できましたが、現在は表示できません。No route matches {:action=>"edit", :controller=>"comments", :article_id=>nil, :id=>nil}いくつかのコメントがある特定の記事 (articles/show) にアクセスしようとすると、ルーティング エラーが発生します。実は記事のコメント編集機能を実装しようとしていました。このために、comments/_comment.html.erb にコメントの「編集」リンクを配置しました。記事にコメントがあり、記事にコメントがない場合にのみこのエラーが発生することは注目に値します。記事とコメントには別のビューがあります。

コメント_コントローラー.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

コメント/edit.html.erb

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

コメント/_comment_form.html.erb

    <%= form_for ([@article, @article.comments.build]), :required => true do |f| %>
    <%= f.hidden_field :article_id %> 
    <%= 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 %>

コメント/コメント.html.erb (ここでは、記事のコメントを編集するためのリンクを提供しています)

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

ルート.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

コメント_コメント.html.erb

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

2 に答える 2

2
<% if @article.comments.count  >= 1 %>
  <div "...">
    <%= comment.content %> # <-- This.

私は疑いを持って、 comments_comment.html.erbcomments/comment.html.erb<%= comment.content %>にある他のcomment変数を調べています。

@article.comments.count >= 1問題の記事にコメントがない場合、 returnとしてエラーを受信しないため、私にはもっともらしいようですfalse

作業comment変数を設定するには、if ステートメントの後にループを挿入します。

<% if @article.comments.count  >= 1 %>
  <div "...">
    <% @article.comments.each do |comment| %> # <-- This.
      <%= comment.content %>
      ...
    <% end %> # Remember to close the loop.
  </div>
<% else %>
...

また、 comment/_comment.html.erb の in の代わりに使用することに注意commentください。@commentedit_article_comment_path

于 2013-04-24T12:09:55.313 に答える
0

メソッド #count が 1 以上を返す場合にのみ、コメントを表示しています。メソッド count を呼び出すと、データベース上で直接カウントされます。コメントのない記事の場合、何もレンダリングされないため、コメントのない記事が表示されるからです。

ただし、コメントが存在する場合は、フォームに表示する新しいコメントを作成し、そのコメントの編集リンクを作成しようとしています。

したがって、私の解決策は、すべてのコメントを再度送信する必要がないため、form_for を変更することです。コメント コレクションにコメントを作成する代わりに、新しいコメントをパラメーターとして渡します。次に、別のビューで、永続化されたコメントごとに編集リンクを作成できます。

于 2013-04-24T12:13:44.280 に答える