2015-09-04 3 views
0
class Project < ActiveRecord::Base 
    has_many :accounts 
    has_many :sites, through: :accounts 
end 

class Site < ActiveRecord::Base 
    has_many :accounts 
    has_many :projects, through: :accounts 
    accepts_nested_attributes_for :accounts 
end 

class Account < ActiveRecord::Base 
    belongs_to :site 
    belongs_to :project 
end 

p = Project.find(1) 

2.1.4 :011 > p.sites.create({"url"=>"site.ru", "accounts_attributes"=>{"0"=>{"email"=>"[email protected]"}}}) 
    (0.3ms) BEGIN 
    SQL (1.8ms) INSERT INTO `sites` (`created_at`, `updated_at`, `url`) VALUES ('2015-09-04 07:09:53', '2015-09-04 07:09:53', 'site.ru') 
    SQL (0.3ms) INSERT INTO `accounts` (`created_at`, `email`, `site_id`, `updated_at`) VALUES ('2015-09-04 07:09:53', '[email protected]', 3, '2015-09-04 07:09:53') 
    SQL (0.3ms) INSERT INTO `accounts` (`created_at`, `project_id`, `site_id`, `updated_at`) VALUES ('2015-09-04 07:09:53', 1, 3, '2015-09-04 07:09:53') 
    (1.2ms) COMMIT 
=> #<Site id: 3, url: "site.ru", created_at: "2015-09-04 07:09:53", updated_at: "2015-09-04 07:09:53"> 

Вопрос:Как добавить запись в модели has_many: через

  1. Почему добавлены 2 записи?
  2. Чтобы добавить отдельную запись в модель учетной записи с полями site_id, project_id, электронной почтой?
+0

Ваш вопрос непонятен? –

ответ

0

Первая запись создается учетная запись автоматически, потому что Site связан с Project через Account.

Вторая запись создана потому, что у вас есть accepts_nested_attributes_for :accounts в вашей модели Site, и вы передаете вложенные атрибуты при создании записи Site.

Не могли бы вы уточнить, что вы хотите архивировать?

+0

Как использовать хеш {"url" => "site.ru", "accounts_attributes" => {"0" => {"email" => "[email protected]"}}} Добавить INSERT INTO 'sites' (' url') VALUES ('site.ru') INSERT INTO 'accounts' (' project_id', 'site_id',' email') VALUES (1, 3, '[email protected]') – user1415485

Смежные вопросы