Ruby на Rails - неопределенный метод "категория" для # Вы имели в виду? category_id - PullRequest
0 голосов
/ 20 марта 2020

Снимок экрана сообщения об ошибке Я изучаю Ruby на Rails в колледже прямо сейчас, и я борюсь с этим. У меня есть проект, который будет завершен в ближайшие дни, но я не могу выяснить, что не так с моим кодом, я попытался исправить его, я уже погуглил его, но безуспешно.

Из-за коронавируса учебные заведения закрыты, и я не могу попросить своего лектора о помощи по этому вопросу.

Буду признателен, если кто-нибудь сможет мне помочь в этом?

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

Ошибка, отображаемая в браузере, следующая:

неопределенный метод 'category' для #

Вы имели в виду? category_id

Трассировка включения шаблона: #

app / views / layouts / _breadcrumb_nav. html .erb: 21 app / views / layout / application. html .erb: 16

Запрос

Параметры:

{"id" => "3"}

Ниже показан мой код, в котором отображается ошибка:

Ниже находится /app/views/layouts/_breadcrumb_nav.html.erb

<!-- Check if there is a post present, a category is present and handle these two scenarios differently, also includes a default link back to the home page -->
<div class="inner">

  <!-- Check if the user is signed in, otherwise just show the normal link -->
  <% if account_signed_in? %>
    <%= link_to "Sign Out", destroy_account_session_path, method: :delete, class: "pull-right m-l-10" %>
    <% else %>

  <%= link_to "Account", root_path, class: "pull-right m-l-10" %>
    <% end %>

  <%= link_to "New Post", new_post_path, class: "pull-right" %>

  <%= link_to "Home", root_path %> >>

  <!-- Do not show category if category if it is new entry and has no category set yet
       check out application_helper.rb
  -->

  <% if @post.present? && !@post.new_record?
       category = @post.category
       parent = category.parent if category.present?
  %>


    <% if parent.present? %>
      <%= link_to parent.name, category_path(parent) %> >>
    <% end %>

    <%= link_to category.name, category_path(category) %> >>
    <%= @post.title %>
  <% elsif @category.present?
       parent = @category.parent
  %>
    <% if parent.present? %>
      <%= link_to parent.name, category_path(parent) %> >>
    <%end %>

      <%= @category.name %>
    <% end %>
</div>

Ниже находится /app/views/layouts/application.html.erb

<!DOCTYPE html>
<html>
  <head>
    <title>Marketplace</title>
    <%= csrf_meta_tags %>
    <%= csp_meta_tag %>

    <%= stylesheet_link_tag 'application', media: 'all' %>
    <%= javascript_pack_tag 'application' %>
  </head>

  <body>


  <div class="header" >
    <%= render "layouts/breadcrumb_nav" %>
  </div>


  <p class="notice"><%= notice %></p>


    <!-- divs for the menu -->
    <div class="main">
      <div class="main-left">
        <p><strong><%= link_to "Marketplace", root_path %></strong></p>

        <!-- Hides the Create a New Post menu once the user leaves the home page -->
        <p><%= link_to "Create a New Post", new_post_path %></p>

        <!-- User login - devise gem-->
        <p><%= link_to "User Login", new_account_session_path unless account_signed_in? %></p>

        <!-- load in categories if the user on a category page, only loads if the categories controller is being used -->
        <%= render "categories/category_sidebar"  if controller.controller_name == "categories" %>



        <% if is_home? %>
        <div class="nav-pages">
          <p><%= link_to "faqs, help", faqs_path %></p>
          <p><%= link_to "learn more about marketplace", about_path %></p>
          <p><%= link_to "avoid scams, fraud, safety tips", fraud_path %></p>
          <p><%= link_to "terms of use", terms_path %></p>
        </div>
        <% end %>

      </div>
      <div class="main-right">

    <%= yield %>

      </div>
    </div>

  </body>
</html>

Ниже приведен /app/models/post.rb

class Post < ApplicationRecord
  # Setting up the relationship in the DB
  belongs_to :parent, class_name: "Category", optional: true
  has_many :subcategories, class_name: "Category", foreign_key: :parent_id, dependent: :destroy
  has_many :posts
end

У меня есть немного знаний о Java и Ruby в Rails убивает меня, и я надеюсь, что вы можете помочь мне out.

Большое спасибо Ричард

1 Ответ

0 голосов
/ 20 марта 2020

Я предполагаю, что вы пытаетесь построить что-то вроде навигационной системы, которая выглядит примерно так:

Authors >> French >> Albert Camus

Начните с настройки ассоциаций:

class Post < ApplicationRecord
  belongs_to :category
  # lets you call post.parent_category without dealing with nil errors
  has_one :parent_category, 
    through: :category
end

class Category < ApplicationRecord
  has_many :posts
  belongs_to :parent_category, 
    class_name: 'Category',
    optional: true
end

Затем DRY код в частичную вместо приготовления супа из вашего ERB.

# app/views/posts/_breadcrumbs.html.erb
<div class="breadcrumbs">
  <% [post.parent_category, post.category].compact.each do |c| %>
    <%= link_to c.name, c %> &raquo;
  <% end %>
  <%= post.name %>
</div>

&raquo; выглядит как ". Если вы действительно хотите использовать >>, вам нужно экранируйте его &gt;&gt; или используйте <%= content_tag(:span, '>>') %>, поскольку > имеет особое значение в HTML.

Затем визуализируйте частичное представление в том виде, в котором вы хотите:

# app/views/posts/show.html.erb
<%= render partial: 'breadcrumbs', post: @post %>
...