has_many through,vs belongs_to

时间:2013-12-13 09:51:11

标签: ruby-on-rails

我对在招聘应用中实现以下功能的最佳方式有点困惑:

所有用户必须填写1“common_application_form”。

在通用申请表中,将有毕业年份,首选行业的多选择选项列表,简历附件等选项。

所有用户都可以通过他们对问题的回答进行过滤。即任何2005年毕业并且更喜欢从事销售工作的人。

我想有两种方法可以做到这一点 -

选项1:用户has_one common_app

在常用应用中,创建grad_year:integer,pref_industries:string等。

然后通过类似的方式过滤 - >

User.includes(:common_app).where('common_app.grad_year = 2005')

这样做的缺点是我不确定如何为行业提供多选择选项列表。数据类型是字符串吗?过滤如何工作?

选项2 has_many通过common_app

选项2可以通过common_app模型通过关联进行某种has_many。我认为这可能是最好的方法,但我对has_many关联有点困惑,并且在构建数据库时遇到了麻烦。

在您看来,您是否会选择选项1,如果是,您将如何处理多选择选项列表?

如果选项2,你会做什么?

当然,也许我完全走错了路,在这种情况下让我知道:P

2 个答案:

答案 0 :(得分:1)

大卫的回答是正确的,你可以看看这个截屏视频:http://railscasts.com/episodes/17-habtm-checkboxes-revised?view=asciicast

我做了几次这样的应用,但有很多多选和选择答案。我采用了name:string group:integer等方法制作一个名为选项的模型的方法......

在选项模型中我有:

def self.by_group(group_number)
  where(:group => group_number)
end

我可以提取选项集合以在示例中使用options.by_group(1)构建表单。

答案 1 :(得分:0)

选项1对我有意义。

关于首选行业,我将其视为用户与行业列表之间的联接 - UserIndustry模型。

如果您想对其应用属性(例如优先级或优先级),那么User和Industry都将拥有User_ndustry,它们属于两者,而Industry和User都通过UserIndustry相互拥有。