ActiveRecord метод поиска # где не фильтрует результаты запроса
TL; DR: Почему я получаю список всех резидентов, когда использую методы класса для охвата между активными и неактивными резидентами?
Мое приложение использует гем 'activ_as_tenant'. Модель арендатора называется Account, в которой много сотрудников, которые управляют резидентами.
class Account < ActiveRecord::Base
before_create :set_subdomain
has_one :admin, class_name: 'Employee', foreign_key: :account_id,
dependent: :destroy, inverse_of: :account
has_many :employees, class_name: 'Employee', foreign_key: :account_id,
dependent: :destroy, inverse_of: :account
has_many :residents
has_many :invites
has_many :daily_summaries
has_one :subscription
.
.
.
end
В схеме моего резидента есть атрибут флага с именем is_active
Цель состоит в том, чтобы провести различие между активными и мягко удаленными резидентами. Вы также можете увидеть добавленные ограничения БД.
create_table :residents do |t|
t.integer :account_id, null: false
t.integer :employee_id, null: false
t.boolean :is_active, default: true, null: false
.
.
.
end
Я разрешаю сотрудникам просматривать "мягко удаленных" жителей и предлагать вкладки с индексами для просмотра как активных, так и неактивных жителей.
В моем классе Resident у меня есть следующие методы класса для области действия, основанные на активном / неактивном состоянии.
class Resident < ActiveRecord::Base
acts_as_tenant(:account)
.
.
.
def self.inactive_count(current_account)
where({ account_id: current_account.id, is_active: false }).count
end
def self.default(current_account)
where({ account_id: current_account.id, is_active: true })
end
def self.inactive(current_account)
# where({ account_id: current_account.id, is_active: false })
where("account_id = ? AND is_active = ?", current_account.id, false).first
end
def archive
update_attribute(:is_active, false)
end
.
.
.
end
Моя проблема в том, что я получаю список всех жителей как на активной, так и на неактивной вкладках в моем индексном представлении. Обратите внимание, что фамилия одинакова на обоих изображениях этой страницы просмотра.
Я бы предпочел, чтобы метод класса возвращал только активных или неактивных жителей соответственно.
Я хочу выяснить, почему я не получаю только активных или только неактивных резидентов на основе моих методов класса запросов.
Методы класса для активного / неактивного счета, кажется, работают как ожидалось, вот пик.
def index
@inactive_residents = Resident.inactive(current_account)
@inactive_resident_count = Resident.inactive_count(current_account)
@active_residents = Resident.default(current_account)
@active_resident_count = Resident.active_count(current_account)
end
Мое чтение до сих пор, чтобы решить:
- Rails Guides - запросы к ActiveRecord
- Rails scope возвращает все, а не ноль
- ActiveRecord:: Отношения
Журналы сервера включены, чтобы показать SQL
Посмотреть шаблоны
index.html.erb
<li class="active">
<a href="#" data-toggle="tab">
Active Residents
<span class="badge badge-purple">
<%= @active_resident_count %>
</span>
</a>
</li>
<li>
<a href="#" data-toggle="tab">
Inactive Residents
<span class="badge badge-dark">
<%= @inactive_resident_count %>
</span>
</a>
</li>
_active_residents.html.erb
<% if @active_residents.any? %>
<tbody>
<% @active_residents.reverse_each do |resident| %>
.
.
.
<% end %>
</tbody>
<% end %>
_inactive_residents.html.erb
<% unless @inactive_residents.nil? %>
<% @inactive_residents.reverse_each do |resident| %>
.
.
.
<% end %>
<% end %>
Обновить после комментария
Мои журналы находятся ниже, ничего не меняется в журнале, когда я выбираю вкладку "неактивно" в браузере. Я также не вижу никакого вывода из консоли js в инструментах разработчика, если я не установил опцию для подробного вывода. Я включу изображение этого также.
2 ответа
Это может быть проблема пользовательского интерфейса /jQuery. Проверьте, правильно ли вы отображаете данные на каждой вкладке. Поскольку счет выглядит правильно.
Это сработало для меня
Второй комментарий в ответе Яна Фото на этот пост
Подводя итог по ссылке выше:
если вы используете
data-attribute
метод, который вы должны иметьhref
атрибут установлен на идентификатор вкладки, которую вы хотите открыть. В версии JS у вас должно быть что-то вроде$('#myTab a[href="#profile"]').tab('show')
чтобы открыть вкладку со значением href, установленным в #profile
Мой пример
в обоих частичных файлах я добавил
<div class="tab-pane fade in active" id="my_tab1_id">
и в index.html.erb, в котором находятся партиалы, которые я изменил href
значение от #
в my_tab_id
<ul class="nav nav-tabs tabs-right">
<li class="active">
<a href="#my_tab1_id" data-toggle="tab">
Active Residents
<span class="badge badge-purple">
<%= @active_resident_count %>
</span>
</a>
</li>
<li>
<a href="#my_tab2_id" data-toggle="tab">
Inactive Residents
<span class="badge badge-dark">
<%= @inactive_resident_count %>
</span>
</a>
</li>
</ul>