Ruby on Rails Редактировать и удалять комментарии

Привет, я пытаюсь добавить комментарии к моей модели булавки. Я могу добавлять комментарии, но, похоже, не могу получить правильную ссылку для своих действий по редактированию и удалению.

контроллер комментариев

            class CommentsController < ApplicationController
                before_action :find_pin
                before_action :find_comment, only: [:destroy, :edit, :update]
                def index

                end

                def show

                end

                def new
                  @comment = Comment.new
                end

                def create

                    @comment = @pin.comments.build(comment_params)
                    @comment.user_id = current_user.id

                    @comment.save

                    if @comment.save
                        flash[:notice] = "Created comment"
                        redirect_to pin_url(@pin.id)
                    else
                        render 'new'
                    end


                end

                def edit

                end

            def update
            @comment = @pin.comments.find(params[:id])
              end

              def destroy

                @comment.destroy
                flash[:notice] = "Deleted Comment"
                redirect_to pin_url(@pin.id)
              end


            private


                def find_pin

                @pin = Pin.find(params[:id])
                end

                def find_comment

                    @comment = Comments.find(params[:pin_id])

                end

                def comment_params
                    params.require(:comment).permit(:content)
                end
            end

просмотр формы комментариев

            <%= form_for ([@comment.build]) do |f| %>
                <p><%= f.text_area :content %></p>

                <p><%= f.submit %></p>
            <% end %>

комментарии показывают вид

        <%= @comment.each do |comment| %>

            <p><%= comment.content %></p>


            <% if current_user == comment.user %>
            <%= link_to "Edit comment", edit_comment_path(@pin, comment)%>
            <%= link_to "Delete comment", [comment.pin,comment], method: :delete  %>
            <% end %>




        <% end %>

маршруты

         Rails.application.routes.draw do
          match '/users',   to: 'users#index',   via: 'get'
          match '/users/:id',     to: 'users#show',       via: 'get'




          get 'homes/show'

          devise_for :users, :path_prefix => 'd'
          resources  :pins do
            member do
              resources :comments
              put "like",    to: "pins#upvote"
            end
          end
          resources :users, :only =>[:show]

          root "pins#index"
        end

контроллер пинов

                 class PinsController < ApplicationController
                        before_action :find_pin, only: [:show, :edit, :update, :destroy, :upvote]
                        before_action :authenticate_user!, except: [:index, :show]

                        def index
                            @pins = Pin.all.order("created_at DESC")

                        end

                        def show

                            @comment= Comment.where(pin_id: @pin).order("created_at DESC") 

                        end


                        def new
                            @pin = current_user.pins.build
                        end

                        def create
                            @pin = current_user.pins.build(pin_params)

                            if @pin.save
                                redirect_to @pin, notice: "Successfully created new Pin"
                            else
                                render 'new'
                            end
                        end

                        def edit
                            if @pin.user != current_user
                           redirect_to root_path
                        end
                        end

                        def update
                            if @pin.update(pin_params) && @pin.user == current_user
                             redirect_to @pin, notice: "Pin was successfully updated"
                        else
                           render 'edit'
                         end
                        end

                        def destroy
                            if @pin.user == current_user
                            @pin.destroy
                            redirect_to root_path
                             else
                             redirect_to root_path, notice: "Not Your Pin!"
                             end    
                        end

                        def upvote
                            @pin.upvote_by current_user
                            redirect_to :back
                        end


                        private

                        def pin_params
                            params.require(:pin).permit(:title, :description, :image)
                        end

                        def find_pin
                            @pin = Pin.find(params[:id])
                        end
                    end

заранее спасибо, я застрял на этом некоторое время по какой-то причине идентификатор пинов и идентификатор комментариев заканчиваются тем же самым или что-то в этом роде http://localhost:3000/pins/30/comments/30

1 ответ

Бежать rake routes чтобы проверить все маршруты, которые у вас есть в вашем приложении. Вы обнаружите, что все маршруты будут названы во множественном числе. Так edit_pins_comments_path будет присутствовать только для вашего приложения. Но, как предполагают ваши модели, у каждой булавки будет много комментариев. Для этого вам нужно вложить свой ресурс комментариев в каждый элемент контактов. Таким образом, ваши маршруты станут как ниже.

resources  :pins do
  member do
    resources :comments
    put "like",    to: "pins#upvote"
    put "favorite",   to: "pins#favorite"
  end
end

Этот код будет генерировать edit_comment_path, comment_path и т.п.

Другие вопросы по тегам