如何通过使用Rails控制台将多个值添加到一列

时间:2019-05-22 08:22:28

标签: ruby-on-rails ruby

关于Rails控制台的一个小问题。我正在使用Ruby 2.6.0,Rails 5.2.3。我创建了一个countries表和一个users表。

我在国家(地区)模型中使用has_and_belongs_to_many :users在用户模型中使用has_and_belongs_to_many :countries。我还在guide之后创建了country_users表。我想为country_id表中的users设置多个值。我认为这是关于将数组添加到一列中。

我在users表中已经有两条记录。我想知道如何使用rails ccountry_id表中的users列添加更多值。

示例: 我在users表中有两条记录:

    <User id: 1, email: "test01@france.com", created_at: "2019-05-21 12:36:08", updated_at: "2019-05-21 12:49:08",countryid: 1, regionid: 1>
    <User id: 2, email: "test02@france.com", created_at: "2019-05-21 12:36:18", updated_at: "2019-05-21 12:49:28",countryid: 2, regionid: 2>

如何通过控制台为第一位用户在country_id列中添加“ 2”?

1 个答案:

答案 0 :(得分:1)

您误解了关系如何存储在数据库中。

如果您为一个对象分配一个parent_id(在您的情况下是一个国家/地区ID),则该对象只能有其中一个,这意味着它不能用于“ has_and_belongs_to_many”关系。

您说您已经建立了一个联接表,该表应称为country_users(或user_countries)。这些记录中的每一个都将具有国家/地区ID和用户ID,以在这两个记录之间建立链接。如果要在控制台中建立这样的关系,请尝试:

country = Country.find(2)
user = User.find(1)
user.countries << country

这将在联接表中创建一条新记录,用户ID为1,国家ID为2,意味着当您致电user.countries时,它将包括刚刚分配的记录。