0

我有一个所有用户的列表,我希望其他用户能够根据用户的三个伞属性进行过滤:

  1. 行业(用户现在工作的行业以及用户之前工作过的行业)
  2. 公司(用户现在工作的公司以及过去的公司)
  3. 学校(用户上过的任何学校)。

这些属性是从 LinkedIn 中提取的,因此每个行业/公司/学校在我的用户模型中都是自己的数据字段(当前/过去一个/过去两个/等)。

这是我的架构的一部分,用于展示我的用户模型:

create_table "users", :force => true do |t|
    ...
    t.string   "first_name"
    t.string   "last_name"
    ...
    t.string   "current_company"
    t.string   "past_company_one"
    t.string   "past_company_three"
    ...
    t.string   "current_industry"
    t.string   "past_industry_one"
    t.string   "past_industry_two"
    t.string   "past_industry_three"
    ...
    t.string   "school_zero_name"
    t.string   "school_one_name"
   ...
end

我想要三个 collection_select 字段(行业/公司/学校),用户可以使用它们来动态过滤返回给他们的用户列表。它的外观和功能与此处的三个选择/过滤器字段非常相似:https ://angel.co/startups

不确定从哪里开始,并且真的可以使用一些帮助。谢谢你。

4

1 回答 1

0

我会考虑在单独的模型上使用 3 个属性表示。因此,您最终将拥有 Company、Industry 和 School 模型来存储用户过去和当前的公司、行业和学校条目。

这样,每个公司/学校/行业都可以拥有更多属性,例如用户工作/上学的时间段。这样一来,一旦您在 3 个模型与 User 模型之间建立了模型关联,就如同说 user.companies 或 user.schools 一样简单。您还可以在公司和行业模型中添加一个字段来指示用户当前工作的公司或行业,以区分用户过去工作过的公司/行业。

像这样的东西:

class User < AR::Base
  has_many :companies
  has_one  :current_company, :class_name => "Company", :conditions => { :current => true }
end

class Company < AR::Base
  # == Schema attributes
  #
  #  id               :integer(4)      not null, primary key
  #  name             :integer(4)
  #  user_id          :integer(4)
  #  current          :boolean         :default => false, :null => false
  #  start_date       :date
  #  end_date         :date

  belongs_to :user
end
于 2012-08-17T14:13:22.840 回答