Изменить путь для рельсов не получить правильный URL - PullRequest
0 голосов
/ 05 декабря 2018

У меня большая проблема с моим приложением rails.Я создаю расширенный блог для своей школьной работы

Мне нужно отредактировать свой комментарий, но мой URL возвращает это '/ posts / 4% 2F12 / comments / 4 / edit', а не / posts / 4 / comments / 12 /edit

если я правильно наберу URL, у меня будет доступ к форме модификации, которая работает

, мой код можно посмотреть здесь

show.html.haml

.article
  .container
    .row
      .col-lg-12
        .cover-image{:style => "background-image: url('#{@post.photo_url}');"}
        %h1.mt-4= @post.title

        #{I18n.l(@post.created_at)}
        %hr/

        %p.lead= @post.content.html_safe
        %hr/

        .card.my-4
          %h5.card-header Ajouter un commentaire :
          .card-body
            = render 'comments/form', comment: @post.comments.build

        .media.mb-4
          .media-body
            - @post.comments.each do |comment|
              %h5.mt-0= comment.content
              %h5.mt-0= comment.user_name
              %h2 Edit user
              = link_to edit_post_comment_path([@post, comment]) do
                %button.btn.btn-primary{:type => "button"} Primary
              = link_to "Delete Comment", [@post, comment], method: :delete, data: { confirm: 'Are you sure?' }

comments_controller.rb

before_action :set_post, only: [:create]

def create
  @comment = @post.comments.new(comment_params)
  @comment.user_name = current_user.nickname
  if @comment.save!
    redirect_to @post
  else
    flash.now[:danger] = "error"
  end
end

def edit
  @post = Post.find(params[:post_id])
end


def destroy
  @post = Post.find(params[:post_id])
  @comment = @post.comments.find(params[:id])
  @comment.destroy
  redirect_to post_path(@post)
 end


private

def comment_params
  params[:comment].permit(:content, :post_id)
end

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

def set_post
  @post = Post.find(params[:post_id])
end

rout.rb

  resources :users, only: :show

  resources :posts do
    resources :comments
  end

  root 'home#index'

  root :to => redirect("/users/sign_in")

Ответы [ 3 ]

0 голосов
/ 05 декабря 2018

Вместо

link_to edit_post_comment_path([@post, comment]) do

попробуйте

link_to edit_post_comment_path(@post, comment) do

или альтернативно

link_to [:edit, @post, comment] do

См. https://guides.rubyonrails.org/routing.html#creating-paths-and-urls-from-objects

0 голосов
/ 05 декабря 2018

используйте before_action в Comments Controller для комментариев также

before_action :set_comment, only: [:show, :edit, :update, :destroy]
.....
.....

private

def set_comment
  @comment = @post.comments.find(params[:id])
end

, а затем в views / comments / show.html.haml

edit_post_comment_path(@post, @comment)

и дайте егопопытка ...

0 голосов
/ 05 декабря 2018

Вы должны передать два аргумента в метод edit_post_comment_path вместо передачи массива, например:

edit_post_comment_path(@post, comment)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...