Как получить новый комментарий в RoR после получения сообщения с набором комментариев на той же странице? - PullRequest
0 голосов
/ 19 марта 2019

После вчерашнего узнавания от Ursus о том, как получить список комментариев к данному сообщению, я смог изменить страницу post / show.html.erb, чтобы отображать информацию сообщения и список (пока еще пустой)комментарии для этого поста на этой странице.Однако я не знаю, как добавить ссылку «Добавить комментарий» на эту страницу, чтобы вызвать форму комментария и задать идентификатор сообщения в поле идентификатора комментария.Пример, который я использовал, сказал, чтобы избавиться от всего каталога Views / comments, но это не дает мне никакой страницы для ввода данных комментариев.Ниже находится верхняя часть контроллера сообщений:

class PostsController < ApplicationController
  before_action :set_post, only: [:show, :edit, :update, :destroy]

  # GET /posts
  # GET /posts.json
  def index
    @posts = Post.all
  end

  # GET /posts/1
  # GET /posts/1.json
  def show
    @post = Post.find(params[:id])
    @comments = @post.comments
  end

  # GET /posts/new
  def new
    @post = Post.new
  end

  # GET /posts/1/edit
  def edit
  end

, а вот верхняя часть контроллера комментариев:

class CommentsController < ApplicationController


  def show
    @comment = Comment.find(params[:id])
  end

  # GET /comments/new
  def new
    @comment = Comment.new
  end

  # POST /comments
  # POST /comments.json
  def create
    @post = Post.find(params[:id])
    @comment = @post.comments.create(comment_params)

    respond_to do |format|
      if @comment.save
        format.html { redirect_to @post, notice: 'Comment was successfully created.' }
        format.json { render :show, status: :created, location: @comment }
      else
        format.html { render :new }
        format.json { render json: @comment.errors, status: :unprocessable_entity }
      end
    end
  end

А вот posts / show.html.erbстраница, которая показывает сообщение и таблицу списка комментариев:

<p id="notice"><%= notice %></p>
<link rel="stylesheet" type="text/css" href="http://ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.4/css/jquery.dataTables.css">

<p>
  <strong>ID:</strong>
  <%= @post.id %>
</p>

<p>
  <strong>Title:</strong>
  <%= @post.title %>
</p>

<p>
  <strong>Body:</strong>
  <%= @post.body %>
</p>


<hr/>
<h1>Comments</h1>

<table id="posts-table">
  <thead>
    <tr>
      <th>Name</th>
      <th>Body</th>
    </tr>
  </thead>

  <tbody>
    <% @comments.each do |comment| %>
      <tr >
        <td><%= comment.name %></td>
        <td><%= comment.body %></td>
      </tr>
    <% end %>
  </tbody>
</table>

<br>
<hr/>
<%= link_to 'Edit', edit_post_path(@post) %> |
<%= link_to 'Add Comment', new_comment_path(@post) %> |
<%= link_to 'Back', posts_path %>

<script>
  $(function(){
    $("#posts-table").dataTable();
  });
</script>

Я запутался в нескольких пунктах:

  1. откуда берется new_comment_path и содержит ли @post элементid нужен для создания комментария и связывания его с постом?
  2. Нужна ли мне страница views / comments / show.html.erb для размещения формы комментария?

Ценю помощь.

1 Ответ

1 голос
/ 19 марта 2019

откуда берется new_comment_path и содержит ли @post идентификатор, необходимый для создания комментария и связывания его с постом?

Он взят из /config/routes.rb.Resources - это ключевое слово, которое определяет типичные

new_comment_path, comment_path, comments_path, etc.

Да, @post содержит идентификатор.

Нужна ли мне страница views / comments / show.html.erb дляпоставить форму для комментария?

Вы можете, если хотите, не обязаны ничего показывать или добавлять какие-либо формы в приложение Rails.Многие приложения на Rails настроены так: views/comments/_form.html.erb и визуализируют форму как частичное везде, где это необходимо.

Вы можете размещать формы где угодно.Не забывайте, что в конце концов вы просто используете HTML.Rails кажется особенным, потому что он имеет несколько предустановленных конфигураций, касающихся отображения действий контроллера в представления.Но вам разрешено делать все, что вы захотите.

Например.

# inside ANY controller
def show
  @comment = Comment.first
  render 'comments/show.html.erb'
end

Это совершенно верно, хотя и очень плохая практика.Но в Rails вы не привязаны ни к одной из его конфигураций.Они просто существуют, чтобы сделать кодирование веб-приложения быстрее и проще.

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