Rails 5 - неопределенная локальная переменная или метод `post ' - PullRequest
0 голосов
/ 25 октября 2018

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

Вот мои категории show.html.erb file:

<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 файл контроллера, где я определяю метод "show":

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, например, у меня должны быть все сообщения, связанные с этой категорией.Может кто-нибудь помочь мне решить эту проблему?

1 Ответ

0 голосов
/ 25 октября 2018

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

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

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

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

...