Извлечение части данных из другой модели / таблицы Active Record - PullRequest
1 голос
/ 24 апреля 2020

Любой совет будет наиболее ценным.

Можно ли получить адрес электронной почты, используемый пользователем, оставившим комментарий, в списке # show / show. html .erb view? Не добавив еще один столбец «электронная почта» в мою модель комментариев?

Лучшее, что я могу сделать, - это получить user_id, что не очень полезно.

<% @list.comments.each do |comment| %>
  <p><%= comment.body%></p>
  <p><%= comment.user_id %> 
<% end %>

Comment.rb

class Comment < ApplicationRecord
  belongs_to :list, optional: true
  belongs_to :user

Таблица комментариев

  create_table "comments", force: :cascade do |t|
    t.text "body"
    t.bigint "list_id", null: false
    t.datetime "created_at", precision: 6, null: false
    t.datetime "updated_at", precision: 6, null: false
    t.integer "user_id"
    t.index ["list_id"], name: "index_comments_on_list_id"
    t.index ["user_id"], name: "index_comments_on_user_id"
  end

Контроллер списка # show

    def show
        @list = List.find(params[:id])
        @current_user = current_user.id
    end

1 Ответ

0 голосов
/ 24 апреля 2020

Используйте Модуль # делегат от ActiveSupport:

class Comment < ApplicationRecord
  belongs_to :list, optional: true
  belongs_to :user
  delegate :email, to: :user
end

<% @list.comments.each do |comment| %>
  <p><%= comment.body%></p>
  <p><%= comment.user_id %> 
  <p><%= comment.email %>
<% end %>

И убедитесь, что вы используете .includes или .eager_load в контроллере, чтобы избежать N +1 запрос:

def show
  @list = List.includes(comments: :user).find(params[:id])
  @current_user = current_user.id
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...