В контроллере диалога у меня есть следующее:
def users_with_existing_conversations
authorize! :users_with_existing_conversations, Conversation
@users = User.accessible_by(current_ability, :index_conversations)
@users = @users.where(id: Conversation.select(:sender_id))
.or(@users.where(id: Conversation.select(:recipient_id)))
@users = @users.search(params[:query]) if params[:query].present?
@users = sort_and_paginate(@users)
set_meta_tags title: "Existing Conversations", reverse: true
end
Внутри пользовательской модели у меня есть это has_many
отношение:
has_many :sender_conversations, class_name: 'Conversation', foreign_key: "sender_id", dependent: :destroy
has_many :recipient_conversations, class_name: 'Conversation', foreign_key: "recipient_id", dependent: :destroy
Внутри модели контроллера, яиметь ассоциацию belongs_to
:
belongs_to :sender, foreign_key: :sender_id, class_name: 'User'
belongs_to :recipient, foreign_key: :recipient_id, class_name: 'User'
Возвращаясь к контроллеру, объект @users
отображается в представлении. Мне нужен дополнительный столбец из таблицы разговоров, который является столбцом last_updated
.
Поэтому в основном я хочу добавить пару ключ-значение в @users
из таблицы conversation
Iпробовал такие вещи, как
@users.each do |user|
user[:latest_conversation] = Conversation.where(sender_id: user.id)
end
, что приводит к can't write unknown attribute latest_conversation
Я также пытался сделать тестовый запрос, например
@testUsers = @users.sender_conversations
Что приводит к undefined method sender_conversations
Как вы можете видеть выше, у меня есть ассоциации в моей модели. В документах приведены примеры, и я подумал, что это будет работать
На мой взгляд, у меня есть:
<% @users.each do |user| %>
<tr class="table__row" onclick="window.location.href = '/conversations?user_id=<%= user.id %>'">
<td><%= user.name %></td>
<td><%= user.surname %></td>
<td><%= user.email %></td>
<td><%= user.company_name.present? ? user.company_name : "N/A" %></td>
<td><%= user.role.capitalize %></td>
<td><%= user.created_at.try(:strftime, '%b %d, %Y') %></td>
<td><%= user.latest_conversation %></td>
<td class="table__more">
<%= link_to "Show details", conversations_path(user_id: user.id), class: 'table__row__details button button--tertiary button--tertiary-small' %>
</td>
</tr>
<% end %>
Так что мне бы очень хотелось получить доступ к @user.latest_conversation
внутри цикла пользователей