Rails 5 - неопределенная локальная переменная или метод `post '

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

Вот мои категории show.html.erb файла:

<h1> <%= "Category: " + @category.name %></h1>

<div align = "center">
  <%= will_paginate @category_posts %>
</div>

<%= render 'posts/post', obj: @category_posts %>

<div align = "center">
 <% will_paginate @category_posts %>
</div>

Я визуализирую партиал _post.html.erb для отображения сообщений, определенных в моей папке сообщений.

Похоже, проблема связана с первой строкой в ​​приведенном ниже коде, потому что сообщение об ошибке указывает на <li id = "post-<%= post.id %>"> в коде _post.html.erb:

<li id = "post-<%= post.id %>">

  <span class = "title"> <%=link_to post.title, post_path(post) %> </span>
  <span class = "content"><%= truncate(post.content, length: 100) if post.content? %></span>
  <span class = "content"> <%= image_tag post.picture.url if post.picture? %> </span>

  <span class = "content">
    <% if post.category.any? %>
      <p><%= render post.category %></p>
    <% end %>
  </span>

</li>

А это мой файл контроллера category, в котором я определяю метод "показа":

class CategorysController < ApplicationController
  before_action :require_admin, except: [:index, :show]

  def index
    @categories = Category.paginate(page: params[:page])
  end

  def new
    @category = Category.new
  end

  def create
    @category = Category.new(category_params)
    if @category.save
      flash[:success] = "Category created successfully"
      redirect_to categories_path
    else
      render 'new'
    end
  end

  def show
    @category = Category.find(params[:id])
    @category_posts = @category.posts.paginate(page: params[:page], per_page: 5)
  end

Модель Post:

class Post < ApplicationRecord
belongs_to :user
  has_many :post_categories
  has_many :categories, through: :post_category

  default_scope -> { order(created_at: :desc) }
  mount_uploader :picture, PictureUploader
  validates :user_id, presence: true
  validates :title, presence: true
  validate :picture_size

  private
    # validates the size of an upload picture
    def picture_size
      if picture.size > 5.megabytes
        errors.add(:picture, "should be less than 5MB")
      end
    end
end

Общая идея заключается в том, что когда я, например, перехожу на localhost/categories/1, у меня должны быть все сообщения, связанные с этой категорией. Может ли кто-нибудь помочь мне решить эту проблему?

У вас есть <% render 'posts/post', obj: @category_posts %>, который должен быть <%= render 'posts/post', obj: @category_posts %>. Это опечатка?

Pavan 25.10.2018 17:56

Это опечатка. Я забыл =

MaxRah 25.10.2018 17:58

Я не работал с частичными файлами, используя способ передачи object в locals. Действительно ли он работает должным образом, если в частичном пути есть каталог?

Scott Schupbach 25.10.2018 19:28
Стоит ли изучать 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 называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
652
1

Ответы 1

Вы, вероятно, хотите отрендерить частичное использование коллекции:

render(partial: 'posts/post', collection: @category_posts)

Где это должно расширить этот партиал, чтобы повторить один раз для каждого сообщения и назначить локальную переменную post.

obj не является допустимым аргументом, но object подходит, если вы хотите визуализировать контент один раз с заданным объектом.

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