Автоматическое управление несколькими настраиваемыми областями для категорий в Rails 5 - PullRequest
0 голосов
/ 29 декабря 2018

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

Например: Название блога 1 для блогаТитул 5 имеет категорию «Технология», а заголовок блога 6 для блога 8 имеет категорию «Бизнес».

Если я нажму на http://localhost:3000/blogs/tech, то будут показаны заголовки блога с 1 по 5, и еслиЯ нажимаю http://localhost:3000/blogs/business, и там будет отображаться заголовок блога с 6 по 8.

Для этого я попытался создать настраиваемую область на контроллере блогов:

class BlogsController < ApplicationController
 def index
    @blogs = Blog.all
  end

  def business
    @blogs = Blog.business
  end 
end 

И затем в моей модели блога:

class Blog < ApplicationRecord

def self.business
    where(post_category: 1)
 end 

end 

Я также создал новое представление для моего бизнес-метода, чтобы показать все элементы блога категории бизнес-типа, и просто скопировал то же содержимое в мой файл index.html.erb.:

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

<h1>Post Category 0</h1>

<table>
  <thead>
    <tr>
      <th>Title</th>
      <th>Body</th>
      <th colspan="3"></th>
    </tr>
  </thead>

  <tbody>
    <% @blogs.each do |blog| %>
      <tr>
        <td><%= blog.title %></td>
        <td><%= blog.body %></td>
        <td><%= link_to blog.status, toggle_status_blog_path(blog) %></td>
        <td><%= blog.post_category.title %></td>
        <td><%= link_to 'Show', blog %></td>
        <td><%= link_to 'Edit', edit_blog_path(blog) %></td>
        <td><%= link_to 'Destroy', blog, method: :delete, data: { confirm: 'Are you sure?' } %></td>
      </tr>
    <% end %>
  </tbody>
</table>

<br>

<%= link_to 'New Blog', new_blog_path %>

И наконец я обновил свои маршруты:

  get 'blogs/business', to: 'blogs#business'

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

Есть ли способы сделать это?

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

Примечание: Блог и таблица PostCategory связаны друг с другом через post_category_id.

1 Ответ

0 голосов
/ 29 декабря 2018

Вам не нужно использовать области здесь.Просто используйте BlogsController#show для отображения сообщений из данной категории.

Начните с добавления поля slug для PostCategory (в базе данных).Прямо сейчас вы используете title в URL, но его нужно заменить на экранированное значение (без пробелов, специальных символов и т. Д.).

Вы можете сделать это с помощью гема илииспользуйте код от моя суть .Просто не забудьте настроить его в соответствии с моделью и полями.

Затем добавьте маршрут (routes.rb):

get 'blog/:slug', to: 'blogs#show', as: :blog_category

Наконец, в вашем BlogsController добавьте метод show:

def show
  category = PostCategory.find_by(slug: params[:slug])
  @blogs   = Blog.where(post_category: category.id)
end

Вот и все.Конечно, вы можете изменить show, разрешив параметры, добавив joins и выполнив один запрос на выборку блогов, но это можно сделать позже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...