не может написать неизвестный атрибут "parent_id", has_one и own_to - PullRequest
0 голосов
/ 11 марта 2020

Я использую rails 4, и мне было интересно, если кто-нибудь сможет найти, что не так в моем коде.

У меня есть модель проекта, и я создал командную модель, которая имеет отношение own_to - has_one с проектом.

модель проекта:

class CrmProject < ActiveRecord::Base
  has_one :crm_team

модель команды

class CrmTeam < ActiveRecord::Base
  belongs_to :crm_project
    accepts_nested_attributes_for :crm_project
  belongs_to :crm_section
  belongs_to :manager, class_name: "User"
  has_many :users
    accepts_nested_attributes_for :users
end

При отправке формы для создания новой Команда я получаю эту ошибку:

ActiveModel::MissingAttributeError in CrmTeamsController#create
can't write unknown attribute `crm_team_id`

и журнал с сервера:

  Parameters: {"crm_team"=>{"crm_project"=>"5", "manager"=>"3", "user_ids"=>["", "2"]}, "co
mmit"=>"Create Crm team"}

  User Load (0.1ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ?  ORDER BY "users"."id" ASC LIMIT 1
  [["id", 1]]
  User Load (0.2ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1  [["id", 2]]
   (0.1ms)  begin transaction
  User Exists (0.2ms)  SELECT  1 AS one FROM "users" WHERE ("users"."email" = 'email@gmail.com' AND "users"."
id" != 2) LIMIT 1
  SQL (0.2ms)  INSERT INTO "crm_teams" ("created_at", "updated_at") VALUES (?, ?)  [["created_at", "2020-03-1
1 07:29:19.735115"], ["updated_at", "2020-03-11 07:29:19.735115"]]
   (0.2ms)  rollback transaction
Completed 500 Internal Server Error in 9ms (ActiveRecord: 1.0ms)

1 Ответ

0 голосов
/ 11 марта 2020

Когда вы используете отношение has_one, подобное этому

has_one :crm_team

Rails ожидает, что вы добавите crm_team_id к вашему crm_project, чтобы понять, какой crm_team связан с объектом crm_project. Добавление этого решит вашу проблему.

По моему мнению, определение противоположного гораздо лучше в логи c. Потому что в будущем у этих команд может быть несколько проектов.

class CrmProject < ActiveRecord::Base
  belongs_to :crm_team
class CrmTeam < ActiveRecord::Base
  ***has_one/has_many(pick one)*** :crm_project
    accepts_nested_attributes_for :crm_project
  belongs_to :crm_section
  belongs_to :manager, class_name: "User"
  has_many :users
    accepts_nested_attributes_for :users
end
...