Я новичок в 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
, у меня должны быть все сообщения, связанные с этой категорией.
Может ли кто-нибудь помочь мне решить эту проблему?
Это опечатка. Я забыл =
Я не работал с частичными файлами, используя способ передачи object
в locals. Действительно ли он работает должным образом, если в частичном пути есть каталог?
Вы, вероятно, хотите отрендерить частичное использование коллекции:
render(partial: 'posts/post', collection: @category_posts)
Где это должно расширить этот партиал, чтобы повторить один раз для каждого сообщения и назначить локальную переменную post
.
obj
не является допустимым аргументом, но object
подходит, если вы хотите визуализировать контент один раз с заданным объектом.
У вас есть
<% render 'posts/post', obj: @category_posts %>
, который должен быть<%= render 'posts/post', obj: @category_posts %>
. Это опечатка?