Ruby on rails Rails 4代理用户配置文件
我有三个模型:Ruby on rails Rails 4代理用户配置文件,ruby-on-rails,model,ruby-on-rails-4.2,Ruby On Rails,Model,Ruby On Rails 4.2,我有三个模型:合作伙伴和用户,带有标准数据(:firstname、:lastname、:email等),还有一个事件模型 使用 用户可以创建一个事件,然后将合作伙伴添加到事件中,通过EventsPartnerjoin表的帮助,合作伙伴的顺序保存在另一个名为“Rank”的行中 需要 我希望用户请求合作伙伴配置文件的所有权,然后将显示用户配置文件而不是合作伙伴配置文件,并且必须遵守初始出现顺序 当用户获得合作伙伴的所有权时,partners.delegate接收true(或者,delegate可以是
合作伙伴
和用户
,带有标准数据(:firstname、:lastname、:email等),还有一个事件
模型
使用
用户可以创建一个事件,然后将合作伙伴添加到事件中,通过EventsPartner
join表的帮助,合作伙伴的顺序保存在另一个名为“Rank”的行中
需要
我希望用户请求合作伙伴配置文件的所有权,然后将显示用户配置文件而不是合作伙伴配置文件,并且必须遵守初始出现顺序
当用户获得合作伙伴的所有权时,partners.delegate接收true(或者,delegate可以是用户的id)
可以使用电子邮件地址进行过滤(合作伙伴和所有者拥有相同的电子邮件)
总结
- 用户1创建一个事件
- 用户1通过电子邮件将合作伙伴A、B、C添加到活动中a@gm.com, b@gm.com, c@gm.com
- 用户2发送电子邮件a@gm.com通过电子邮件@gm.com询问合作伙伴A的所有权
- 用户1事件将显示用户2信息,而不是合作伙伴A,保持EventsPatner的出现顺序
事件中#显示我目前的行动:
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
因此,对于我参加的活动:
- 合作伙伴(id、电子邮件、代表)
- 用户(id、电子邮件)
- EventsPatner(事件id、合作伙伴id、等级)
问题
当option delegate为1时,如何正确打印参加活动的合作伙伴列表,将合作伙伴信息替换为所有者的信息,并保持初始顺序
现在,我只是将event_合作伙伴的价值观替换为:
但我不喜欢这种黑客行为
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
谢谢你的帮助