ActiveRecord 查找器方法 #where 不过滤查询结果
ActiveRecord finder method #where not filtering query results
TL;DR: 当我使用 class 方法在活动和非活动之间确定范围时,为什么我会收到所有居民的列表居民?
我的应用程序使用 'acts_as_tenant' gem。租户模型称为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
我允许员工查看软删除的居民并提供两个 active/inactive 居民的标签式索引视图。
在我的 Resident class 中,我有以下 class 方法来根据 active/inactive 状态确定范围。
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
我的问题 是我在索引视图的活动和非活动选项卡中收到所有居民的列表。请注意,此视图页面的两张图片中的姓氏相同。
对于 class 方法,我更喜欢 ,而不是 return 活跃或不活跃的居民。
我想知道为什么我没有根据我的查询 class 方法只接收活跃或不活跃的居民。
active/inactive 计数的 class 方法似乎按预期工作,这是一个峰值。
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 querying
- Rails scope returns all instead of nil
- ActiveRecord::Relation
包含服务器日志以显示 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 %>
评论后更新
我的日志在下面,当我在浏览器中 select 'inactive' 选项卡时,日志中没有任何变化。我也没有在开发工具中看到任何来自 js 控制台的输出,除非我为详细输出设置了一个选项。我也会附上这张图片。
这对我有用
Second comment in Yan Foto's answer to this SO post
总结以上link:
if you are using the data-attribute
method you have to have the href
attribute set to the ID of the tab you want to open. In JS version you have to have something like $('#myTab a[href="#profile"]').tab('show')
in order to open a tab with href value set to #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>
这可能是一个 UI/jQuery 问题。查看您是否在每个选项卡下呈现正确的数据。由于计数看起来正确。
TL;DR: 当我使用 class 方法在活动和非活动之间确定范围时,为什么我会收到所有居民的列表居民?
我的应用程序使用 'acts_as_tenant' gem。租户模型称为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
我允许员工查看软删除的居民并提供两个 active/inactive 居民的标签式索引视图。
在我的 Resident class 中,我有以下 class 方法来根据 active/inactive 状态确定范围。
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
我的问题 是我在索引视图的活动和非活动选项卡中收到所有居民的列表。请注意,此视图页面的两张图片中的姓氏相同。
对于 class 方法,我更喜欢 ,而不是 return 活跃或不活跃的居民。
我想知道为什么我没有根据我的查询 class 方法只接收活跃或不活跃的居民。
active/inactive 计数的 class 方法似乎按预期工作,这是一个峰值。
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 querying
- Rails scope returns all instead of nil
- ActiveRecord::Relation
包含服务器日志以显示 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 %>
评论后更新
我的日志在下面,当我在浏览器中 select 'inactive' 选项卡时,日志中没有任何变化。我也没有在开发工具中看到任何来自 js 控制台的输出,除非我为详细输出设置了一个选项。我也会附上这张图片。
这对我有用
Second comment in Yan Foto's answer to this SO post
总结以上link:
if you are using the
data-attribute
method you have to have thehref
attribute set to the ID of the tab you want to open. In JS version you have to have something like$('#myTab a[href="#profile"]').tab('show')
in order to open a tab with href value set to #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>
这可能是一个 UI/jQuery 问题。查看您是否在每个选项卡下呈现正确的数据。由于计数看起来正确。