保存用户的多个首选项

时间:2016-02-04 17:02:56

标签: ruby-on-rails postgresql

我需要能够保存用户的偏好,我想知道自己是否走在正确的轨道上。

以下示例:

  • 用户:has_many preferences
  • 偏好:belongs_to用户,has_many煎饼,has_many冰淇淋
  • Pancake:belongs_to preference
  • 冰淇淋:belongs_to preference

表格包含以下内容:

  • 用户:姓名,电子邮件,电话......
  • 首选项:user_id,pancake_id,icecream_id
  • 煎饼:名称(即whipcream)
  • 冰淇淋:名称(即草莓)

现在,在用户创建他的常规个人资料(姓名,电子邮件,性别,电话号码,...)之后 我想将它们重定向到一个让他们填写食物偏好的页面。

用户可以喜欢多种冰淇淋

我是否使用正确的逻辑来让用户填写他们的偏好?

有没有更好的方法可以实现保存用户偏好的目标?

我现在这样做的方式应该会产生类似这样的>>

偏好

id,user_id,pancake_id,icecream_id

1,2,[1,2],[3,5,7,2]

效率这么高吗?

谢谢。

2 个答案:

答案 0 :(得分:1)

我可能会使用更简单的东西 - 有许多通过关联来模拟你的现实。

AppActivity

同样的煎饼..

答案 1 :(得分:1)

首先,我认为我们可以像这样修改架构:

enter image description here

  • User有很多Preference
  • Preference有很多PancakePreferencePancake,因此PreferencePancakePreferencePancake
  • 的联接表
  • Preference有很多IcecreamPreferenceIcecream,因此PreferenceIcecreamPreferenceIcecream
  • 的联接表

为什么我建议这个?

  • PancakeIcecream存在而不关心Preference
  • 这种关系更自然,更灵活,可以在PreferencePancake / Icecream之间进行更改。因为User可以将许多PancakeIcescream视为他的偏好。顺便说一下,许多用户可能会喜欢IcescreamPancake

然后,模型的定义很明确:

class User < ActiveRecord::Base
  has_many :preferences
end

class Preference < ActiveRecord::Base
  has_many :preference_pancakes
  has_many :preference_icescreams

  has_many :pancakes, through: :preference_pancakes
  has_many :icescreams, through: :preference_icescreams
end

class Pancake < ActiveRecord::Base
  has_many :preference_pancakes
end

class Icecream < ActiveRecord::Base
  has_many :preference_icescreams
end

class PreferencePancake < ActiveRecord::Base
  belongs_to :preference
  belongs_to :pancake
end

class PreferenceIcecream < ActiveRecord::Base
  belongs_to :preference
  belongs_to :icescream
end