【问题标题】:has_many through, vs belongs_tohas_many 通过,vs belongs_to
【发布时间】:2013-12-13 18:08:07
【问题描述】:

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

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

在常见的申请表中,会有毕业年份、首选行业的多选列表、简历附件等选项。

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

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

选项 1:用户拥有一个 common_app

在普通app中,创建grad_year:integer、pref_industries:string等。

然后通过类似这样的东西过滤-->

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

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

选项 2 has_many 到 common_app

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

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

如果是选项 2,你会怎么做?

当然,也许我完全走错了路,在这种情况下请告诉我:P

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

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

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

    在我拥有的选项模型中:

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

    我可以提取选项集合来构建表单,例如options.by_group(1)

    【讨论】:

      【解决方案2】:

      选项 1 对我来说很有意义。

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

      如果您想对其应用属性(例如偏好强度或优先级),则 User 和 Industry 都将 has_many UserIndustry,这将属于它们两者,Industry 和 User 都通过 UserIndustry 相互 has_many。

      【讨论】:

      • 非常酷。在这种情况下,我将拥有大多数不是 common_app 模型的多选选项列表部分的选项,而是将多选的选项分离为 many_to_many 关系。我理解正确吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-20
      • 1970-01-01
      相关资源
      最近更新 更多