我有三种型号:Partner
& User
,标准数据(:firstname,:lastname,:email等)和Event
模型
使用
用户可以创建活动,然后在活动中添加合作伙伴,在EventsPartner
联接表的帮助下,合作伙伴的订单会保存在名为“排名”的附加行中。
需要
我希望用户请求合作伙伴资料的所有权,然后将显示用户资料而不是合作伙伴资料,并且必须遵守初始出现顺序。
当用户取得合作伙伴的所有权时,partners.delegate会收到true(作为替代方案,委托可以是用户的ID)
可以使用电子邮件地址进行过滤(合作伙伴和所有者拥有相同的电子邮件)
总结
所以,在我现在的events#show
行动中:
def show # with delegate is boolean, true
event_partners = @event.partners.all
# order is stored in EventsPartner (:event_id, :partner_id, :rank)
event_partners_only = @event.partners.where(delegate: false)
event_users_only = @event.partners.where(delegate: true)
users_email = event_users_only.pluck(:email)
event_users_only = User.where(email: users_email)
# how can I display the Users and Partners in the right order
end
def show # with delegate takes owner id
event_partners = @event.partners.all
# order is stored in EventsPartner (:event_id, :partner_id, :rank)
event_partners_only = @event.partners.where(delegate: nil)
event_users_only = @event.partners.where.not(delegate: nil)
users_id = event_users_only.pluck(:id)
event_users_only = User.where(id: users_id)
# how can I display the Users and Partners in the right order
end
所以,对于我有的事件:
问题
如何正确打印参加活动的合作伙伴列表,当选项委托为1时,由所有者替换合作伙伴信息,并仍保持初始订购?
现在,我只需要像这样替换event_partners的值: 但是我对这个黑客并不满意......
event_partners.each do |ep|
if ep.delegate?
eu = event_users_only.find(email: ep.email)
ep.firstname = eu.firstname
ep.lastname = eu.lastname
ep.occupation = eu.occupation
ep.vignettea.url(:square) = eu.vignettea.url(:square)
end
end
感谢您的帮助