我有以下代码:
@memberlist = []
@memberlistpage = @memberlist.paginate(page: params[:page], per_page: 20)
Member.all.includes(:bronze, :silver, :gold).each do |member|
if member.bronze
if member.bronze.skillas.to_s.include?(@assessor.id.to_s)
@memberlist << member
end
if member.bronze.serviceas.to_s.include?(@assessor.id.to_s)
@memberlist << member
end
if member.bronze.precreationas.to_s.include?(@assessor.id.to_s)
@memberlist << member
end
if member.bronze.ajourneyas.to_s.include?(@assessor.id.to_s)
@memberlist << member
end
end
end
使用该代码即可搜索并将Members
添加到数组中。我需要将它添加到Active Record Relation中,以便我可以使用pagination
。
结构:
表名:成员
# id :integer not null, primary key
# awardunit_id :integer
# name :string(255)
# address :string(255)
# district :string(255)
# gender :string(255)
# dob :date
# contact :string(255)
# email :string(255)
# operator :string(255)
# entrylvl :string(255)
# guardianname :string(255)
# guardianaddress :string(255)
# guardiancontact :string(255)
# guardianemail :string(255)
# currentaward :string(255)
# disabled :boolean default(FALSE)
# created_at :datetime
# updated_at :datetime
表名:青铜器
# id :integer not null, primary key
# member_id :integer
# regdate :date
# expdate :date
# compldate :date
# skill :text
# skillas :integer
# service :text
# serviceas :integer
# precreation :text
# precreationas :integer
# ajourney :text
# ajourneyas :integer
# created_at :datetime
# updated_at :datetime
答案 0 :(得分:0)
Member.none
将返回一个空的活动记录关系对象。而不是让所有成员和循环遍历每个成员以获得您想要的内容,如何为每个成员设置查询,然后使用merge来组合它们。
答案 1 :(得分:0)
查询很容易完成这项工作
例如:
Member.joins("LEFT OUTER JOIN bronze on member.id=bronze.member_id").where("bronze.skillas like '%#{@assessor.id}%'").paginate(page: params[:page], per_page: 20)
根据表结构,您可以在上面的查询中为剩余值添加多个连接和where子句条件。
答案 2 :(得分:0)
将数据更改为此类
更改请求会不会更容易@memberlist = []
Bronze.all.each do | bronze |
@memberlist << bronze.members.all
end
这可能不起作用,但显示我的意思。青铜器与用户有关,我想是has_many。
那么你得到所有user_id的Bronze.first.all.map(&:user_id)
?