#ruby-on-rails #ruby-on-rails-3 #activerecord #ruby-on-rails-4
#ruby-on-rails #ruby-on-rails-3 #activerecord #ruby-on-rails-4
Вопрос:
Пользователь — last_active_at (последний вход вовремя)
Сообщество -идентификатор пользователя
Код -идентификатор пользователя -идентификатор сообщества
- Сообщества и коды пользователя has_many
- Сообщество принадлежит пользователю, коды has_many
- Код принадлежит пользователю и сообществу
модели/user.rb
has_many :communities
has_many :codes, :dependent => :destroy
модели/community.rb
belongs_to :user, counter_cache: true
has_many :codes
модели/code.rb
belongs_to :user, counter_cache: true
belongs_to :community, counter_cache: true
Я могу получить все сообщества, написав подобное кодирование с помощью драгоценного камня под названием ‘acts_as_votable’ (https://github.com/ryanto/acts_as_votable)
@communities = current_user.get_up_voted(Community)
Затем я пытаюсь получить все коды из этих all @communities.
@codes = Code.includes(:user).where(:community_id => @communities.collect(amp;:id)).order('created_at DESC').page(params[:page]).per(10)
Но я хочу отсортировать его по last_active_at
столбцу пользовательской таблицы.
Итак, я попробовал это ниже
@codes = Code.includes(:user).where(:community_id => @communities.collect(amp;:id)).order("users.last_active_at DESC").page(params[:page]).per(10)
Но загрузка занимает целую вечность.
Вероятно, лучшее решение — создать has_many
условие между сообществом и пользователем с помощью кода? Тогда это должно быть что-то вроде этого.
@codes = @communities.code_group.include(:users).order("users.last_active_at DESC").page(params[:page]).per(10)
Как я могу изменить свой код?
Ответ №1:
Я считаю, что вам нужно изменить has_many
в User
модели на has_many codes, through: :communities
. Тогда Code
следует только belongs_to :community
. Это если Users
‘s не может иметь Codes
без Code
связи с Community
Комментарии:
1. что делать, если пользователь не имеет доступа к сообществу, но у него есть код для этого сообщества?
2. Под «не принадлежит» вы имеете в виду, что в базе данных нет записи для этой комбинации пользователя / сообщества?
3. нет. Пользователь может принадлежать сообществам, и это обрабатывается с помощью драгоценного камня под названием «acts_as_votable», как я указал в своем вопросе. Таким образом, он полностью отделен от таблицы кода.