Rails:使用基于用户的字段扩展模型

时间:2014-07-08 14:45:21

标签: ruby-on-rails

我是Ruby on Rails的新手,我想知道如何处理这个问题:

我有例如一张桌子"城市"有姓名,人口等等,然后"最后一次访问","评级"和其他领域,但后者取决于具体用户。我希望能够使用" user.cities"然后" city.name"," city.last_visited",但我不想复制非用户相关的字段。 (例如,用户A在2005年访问了巴黎,用户B在2008年访问。" city.name"是相同的,但" city.last_visited"不同)

1 个答案:

答案 0 :(得分:0)

示例中的城市具有通用属性(名称,位置)以及特定于用户体验或访问城市的属性(last_visited,visit_duration)。那么,你在这里寻找的是连接表。这将包含有关特定用户和城市的所有信息。首先,我们为UserCity生成一个模型,该模型将包含特定于用户的所有城市信息。

rails g model UserCity user:references city:references last_visited:datetime

为UserCity的此generate命令添加任何其他特定于用户的字段。运行rake db:migrate后,请定义关联。

class User < ActiveRecord::Base
  has_many :user_cities
  has_many :cities, through: :user_cities
end

class City < ActiveRecord::Base
  has_many :user_cities
  has_many :users, through: :user_cities
end

确保您的城市表中只包含不属于单个用户的列,即名称。然后,要显示用户访问过的所有城市,以及他们最后一次访问该城市,您可以使用:

<% user.user_cities.includes(:city).find_each do |uc| %>
  <div>
    <%= uc.city.name %>
    <%= uc.last_visited %>
  </div>
<% end %>