Rails 4委派用户个人资料

时间:2015-04-23 15:30:02

标签: ruby-on-rails model ruby-on-rails-4.2

我有三种型号:Partner& User,标准数据(:firstname,:lastname,:email等)和Event模型

使用

用户可以创建活动,然后在活动中添加合作伙伴,在EventsPartner联接表的帮助下,合作伙伴的订单会保存在名为“排名”的附加行中。

需要

我希望用户请求合作伙伴资料的所有权,然后将显示用户资料而不是合作伙伴资料,并且必须遵守初始出现顺序。

当用户取得合作伙伴的所有权时,partners.delegate会收到true(作为替代方案,委托可以是用户的ID)

可以使用电子邮件地址进行过滤(合作伙伴和所有者拥有相同的电子邮件)

总结

  • 用户1创建活动
  • 用户1通过电子邮件a@gm.com,b @ gm.com,c @ gm.com将合作伙伴A,B,C添加到活动中
  • 用户2通过电子邮件a@gm.com向合作伙伴A询问电子邮件@ gm.com
  • 的所有权
  • 用户1事件将显示用户2信息而非合作伙伴A,保持活动顺序来自EventsPartner

所以,在我现在的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

所以,对于我有的事件:

  • 合作伙伴(身份证,电子邮件,代表)
  • 用户(身份证,电子邮件)
  • EventsPartner(event_id,partner_id,rank)

问题

如何正确打印参加活动的合作伙伴列表,当选项委托为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 

感谢您的帮助

0 个答案:

没有答案