Rails - отображать имя категории в представлениях через таблицы отношений - PullRequest
0 голосов
/ 02 января 2019

У меня есть две таблицы, которые я ставлю отношения с блогом и post_categories. Ниже приведена схема:

  create_table "blogs", force: :cascade do |t|
    t.string "title"
    t.text "body"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.string "slug"
    t.integer "status", default: 0
    t.bigint "post_category_id"
    t.index ["post_category_id"], name: "index_blogs_on_post_category_id"
    t.index ["slug"], name: "index_blogs_on_slug", unique: true
  end

  create_table "post_categories", force: :cascade do |t|
    t.string "name"
    t.text "description"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

Теперь я пытаюсь отобразить имя категории вместо идентификатора категории в моем файле index.html.erb блога. Я сделал следующее, но не сработало:

<tbody>
    <% @blogs.each do |blog| %>
      <tr>
        <td><%= blog.title %></td>
        <td><%= blog.body %></td>
        <% PostCategory.all.each do |c| %>
          <% if c.id == blog.post_category %>
          <td><%= c.name %>
          <% end %>
        <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>

Примечание: я также пытался получить к нему доступ напрямую через <td><%= blog.post_category.name %></td>, но все равно не работал.

Есть идеи, как отобразить имя категории вместо связанного с идентификатором категории?

Ответы [ 2 ]

0 голосов
/ 02 января 2019

Согласно предоставленной вами схеме, отмечается, что объект PostCategory имеет много объектов Blog

изменения модели,

class PostCategory < ApplicationRecord
  has_many :blogs
end

class Blog < ApplicationRecord
  belongs_to :post_category
end

просмотр изменений,

<tbody>
  <% @blogs.each do |blog| %>
    <tr>
      <td><%= blog.title %></td>
      <td><%= blog.body %></td>
      <td><%= blog.post_category.name rescue 'No post category present for this blog' %></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 %>
0 голосов
/ 02 января 2019

смена модели,

class PostCategory < ApplicationRecord
  has_many :blogs
end

class Blog < ApplicationRecord
  belongs_to :post_category
end

просмотр изменений,

<tbody>
  <% @blogs.each do |blog| %>
    <tr>
      <td><%= blog.title %></td>
      <td><%= blog.body %></td>
      <td><%= blog.post_category.try(:name) %></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 %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...