Невозможно отобразить 2 фрагмента на одной странице

Пытаюсь сделать задачу "простой список дел", но не знаю как вывести на одной странице как на скрине http://joxi.net/v29DKEVcBLB5mG (т.е. там список сохраненных элементов и справа форма для добавление нового). Если все по отдельности у меня работает, но когда рендерит 2 партиала на одной странице - ошибка undefined method each for #<Track:0x00007f8fc42c2698> (NoMethodError in Tracks#new) Вот мой новый.html.erb

<h1> Create a New Item!</h1>
<%= render 'table' %>
<%= render 'form' %>

Частичная таблица:

<table border = "1">
  <thead>
    <tr>
      <th>ID</th>
      <th>All Tracks</th>
      <th>It's description</th>
      <th>Priority</th>
      <th>Date</th>
      <th>Delete</th>
      <th>Restore</th>
    </tr>
  </thead>
  <tbody>
    <% @track.each do |track| %>
    <tr>
      <td> <%= track.id %> </td>
      <td> <%= link_to track.item, edit_track_path(track.id) %> </td>
      <td> <%= track.description %> </td>
      <td> <%= track.priority %> </td>
      <td> <%= track.created_at.strftime('%d/%m/%Y') %> </td>
      <td><%= button_to "Delete", track_path(track.id), method: :delete %></td>
      <td><%= button_to "Restore", track_path(track.id), method: :put %></td>
    </tr>
    <% end %>
  </tbody>
</table>

И частичное _form:

  <%= form_for @track do |f| %>
  <p>
    <%= f.label :item %><br>
    <%= f.text_field :item %>
  </p>
  <p>
    <%= f.label :description %><br>
    <%= f.text_area :description %>
  </p>
  <p>
    <%= f.select :priority, priorities,
        prompt: "Select priority" %>
  </p>
  <p>
    <%= f.submit %>
  </p>
  <% end %>
    <%= link_to 'Back', tracks_path %>
    <%= link_to 'Home', root_path %>

И контроллер треков:

class TracksController < ApplicationController
  before_action :find_track, only: [:show, :edit, :update, :destroy]

  def index
    @track = Track.all
  end

  def show
  end

  def new
    @track = Track.new
  end

  def create
    @track = Track.new(track_params)
    if @track.save
      flash[:success] = "It works!"
      redirect_to tracks_path
    else
      flash[:success] = "Its wrong!"
      render 'new'
    end
  end

  def update
    if @track.update(track_params)
      redirect_to @track
    else
      render 'edit'
    end
  end

  def edit
  end

  def destroy
    @track.destroy
    redirect_to tracks_path
  end

private
  def track_params
    params.require(:track).permit(:item, :description, :priority)
  end

  def find_track
    @track = Track.find(params[:id])
  end
end

Заранее спасибо!

@track — это один объект Track. Вы тоже ставите @tracks? Если это так, измените вид таблицы на @tracks.each do.
engineersmnky 28.05.2019 22:27

Добавьте TracksController к вопросу, пожалуйста

Vasilisa 29.05.2019 05:02

@Vasilisa только что добавила

Kevin Lingard 29.05.2019 08:50

инженермнкы Нет, не знаю. Я добавил код своего контроллера в публикацию, на самом деле, если я устанавливаю @tracks, все равно появляется та же ошибка.

Kevin Lingard 29.05.2019 09:03
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
39
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

В контроллере попробуйте использовать @треки для нескольких записей.

  def index
    @tracks = Track.all
  end

В таблице частично используйте приведенное ниже

<table border = "1">
  <thead>
    <tr>
      <th>ID</th>
      <th>All Tracks</th>
      <th>It's description</th>
      <th>Priority</th>
      <th>Date</th>
      <th>Delete</th>
      <th>Restore</th>
    </tr>
  </thead>
  <tbody>
    <% @tracks.each do |track| %>
    <tr>
      <td> <%= track.id %> </td>
      <td> <%= link_to track.item, edit_track_path(track.id) %> </td>
      <td> <%= track.description %> </td>
      <td> <%= track.priority %> </td>
      <td> <%= track.created_at.strftime('%d/%m/%Y') %> </td>
      <td><%= button_to "Delete", track_path(track.id), method: :delete %></td>
      <td><%= button_to "Restore", track_path(track.id), method: :put %></td>
    </tr>
    <% end %>
  </tbody>
</table>

Вы использовали @track для одной и нескольких записей. Попробуйте использовать @треки для нескольких записей и @отслеживать для одного объекта.

Та же ошибка (неопределенный метод "каждый" для nil:NilClass NoMethodError в Tracks#new)

Kevin Lingard 29.05.2019 09:18
Ответ принят как подходящий

Поскольку вы визуализируете страницу для действия Tracks#new, она должна быть

def new
  @tracks = Track.all
  @track = Track.new
end

а также

<% @tracks.each do |track| %>

в итераторе представления. Также вам нужно добавить @tracks = Track.all к действию create, иначе вы не сможете отображать таблицу треков при ошибке проверки.

Обратите внимание, что по соглашению мы используем множественное число from для коллекций и единственное число для одной записи. Вам нужно иметь как @tracks, так и @track в действии new, так как вы хотите отобразить все страницы и создать новую.

Кстати, вы где-нибудь используете действие index? Если нет, вы можете безопасно удалить его из контроллера и routes.rb

@KevinLingard, рад помочь вам

Vasilisa 29.05.2019 16:32

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