Nano Hash - криптовалюты, майнинг, программирование

Маршрут не соответствует {:action=›edit, :controller=›comments, :article_id=›nil, :id=›nil} для редактирования комментариев к статье в блоге ruby ​​on rails

Мое приложение работало нормально, пока я не решил добавить функцию редактирования комментариев. До этого я мог просмотреть конкретную статью, но не сейчас. Теперь я получаю ошибку маршрутизации как No route matches {:action=>"edit", :controller=>"comments", :article_id=>nil, :id=>nil}, когда пытаюсь получить доступ к определенной статье (статьям/шоу), в которой есть комментарии. На самом деле я пытался реализовать функцию редактирования комментариев для статьи. Для этого я поставил ссылку «Редактировать» для комментариев в comments/_comment.html.erb. Заметно, что я получаю эту ошибку, только если в статье есть комментарии, а когда в статье нет комментариев, она не возникает. У меня есть отдельные представления для статей и комментариев.

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

комментарии/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 %>

comments/comment.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 %>

Результат rake route (неполный)

            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

comments_comment.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 %>

  • Можете ли вы опубликовать свой просмотр статьи и свой частичный _comment? 24.04.2013
  • привет alexBrand, я добавил часть _comment. Что касается просмотра статей, вы спрашиваете статьи/показ или индексную страницу. Я уже добавил статьи/страницу шоу. Если вам нужно больше кода для вставки, дайте мне знать. 24.04.2013
  • Можете показать нам результат ваших рейк-маршрутов? возможно, это неправильный путь маршрута 24.04.2013
  • привет, Нич, я уже добавил результат рейк-маршрутов. Пожалуйста, проверьте вопрос. 24.04.2013
  • привет, я не получаю эту ошибку, когда я посещаю статью, которая не имеет комментариев. Я добавил ссылку «Редактировать» в comments/_comment.html.erb. Пожалуйста, посмотрите там. 24.04.2013
  • У вас есть форма комментариев на той же странице, где вы отображаете комментарии? Можешь показать вид статьи? 24.04.2013
  • привет alexBrand, после внесения изменений в commemts/_comment.html.erb я могу просмотреть все комментарии к статье и даже отредактировать ссылку работает как-то, но не идеально. Проблема в том, что когда я нажимаю ссылку «Изменить», в ней не отображается никакого содержимого. означает, что после нажатия ссылки «Редактировать» текстовая область становится пустой. не могли бы вы взглянуть на comments_controller.rb (специальное действие редактирования и обновления) 24.04.2013

Ответы:


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

Я высказываю свои подозрения относительно <%= comment.content %> и других comment переменных, найденных в файлах comments_comment.html.erb и comments/comment.html.erb.

Мне кажется правдоподобным, поскольку вы не получаете ошибок, если в рассматриваемой статье нет комментариев, поскольку @article.comments.count >= 1 возвращает 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 в edit_article_comment_path в comment/_comment.html.erb.

24.04.2013
  • даже я чувствую, что проблема заключается в частях комментариев. Но точно не знаю. Я поставил ссылку Редактировать комментарии/_comment.html.erb. это выглядит хорошо для вас. 24.04.2013
  • привет Sunxperous, но как он показывает ошибку маршрутизации, когда действие редактирования находится в comments_controller.rb. 24.04.2013
  • Я расширил свой ответ, посмотрите, решит ли он проблему ошибки маршрутизации. Ошибка могла быть вызвана edit_article_comment_path. 24.04.2013
  • привет Sunxperous, вау, я работал на меня. Теперь мы можем показать все комментарии к статье, и нажатие на ссылку редактирования показывает форму редактирования, но проблема в том, что когда я нажимаю ссылку редактирования, в ней не отображается содержимое. Я имею в виду, что он показывает нам пустую текстовую область. но для целей редактирования, как мы можем видеть в stakoverflow, когда мы редактируем наш вопрос, в текстовом поле отображается исходное содержимое. любое предложение, я думаю, что проблема в comments_controller.rb (с действием редактирования и обновления.) 24.04.2013
  • Замените form_for ([@article, @article.comments.build]) на form_for @comment, так как @comment — это комментарий, извлекаемый в действии редактирования. Нет необходимости включать hidden_field :article_id, так как статья, к которой относится комментарий, становится известной в действии обновления через @article = @comment.article. Я могу ошибаться в отношении части статьи. 24.04.2013
  • Привет, Sunxperous, я думаю, проблема в файле commments_controller.rb и в действиях редактирования и обновления. потому что нажатие на ссылку редактирования не несет ее содержимого. не могли бы вы увидеть здесь какую-либо проблему. 24.04.2013
  • Вы уже заменили на form_for @comment? Также удалите :required => true. Сообщите нам новый код, если он по-прежнему не работает. 24.04.2013
  • Я заменил его, но все равно получаю ту же ошибку. глядя на этот вопрос. 24.04.2013
  • давайте продолжим это обсуждение в чате 24.04.2013

  • 2

    Вы показываете комментарии, только если метод #count возвращает 1 или больше. Когда вы вызываете метод count, он подсчитывается непосредственно в базе данных, в случае статьи без каких-либо комментариев он ничего не отображает, потому что вы можете видеть статью без комментариев.

    Но когда комментарий существует, вы создаете новый комментарий для отображения в форме, а также пытаетесь создать для него ссылку редактирования.

    Итак, мое решение состоит в том, чтобы изменить ваш form_for, поскольку вам не нужно повторно отправлять все свои комментарии, передать новый комментарий в качестве параметра вместо создания одного в коллекции комментариев. Затем в другом представлении вы можете создать ссылку редактирования для каждого из сохраненных комментариев.

    24.04.2013
  • привет Пауло, спасибо за ваше предложение. мне нужно изменить параметры в form_for или нужно изменить сам form_for. Не могли бы вы объяснить это немного. Спасибо 24.04.2013
  • Просто измените строку form_for на это ‹%= form_for ([@article, Comment.new]), :required =› true do |f| %› 24.04.2013
  • привет, Пауло Энрике, я попытался с вашим предложением, но все равно получаю сообщение об ошибке. Маршрут не соответствует {:action=›edit, :controller=›comments, :article_id=›#‹Идентификатор статьи: 21, заголовок: полезно для здоровья, текст: uby on Rails 3 Проверка данных модели\r\nRails Model D.. ., created_at: 2013-04-14 15:14:19, updated_at: 2013-04-24 05:51:20, user_id: 1, Impressions_count: 39›, :id=›nil}. Он показывает, что идентификатор равен нулю. это создает проблему. 24.04.2013
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..