Могу ли я создать новую модель ActiveRecord с родительской моделью и дочерней моделью В НАЛИЧИИ? - PullRequest
0 голосов
/ 13 февраля 2019

Я хочу создать некоторые модели ActiveRecord с помощью ОДНОГО МЕТОДА.

Мои записи приведены ниже.

class Company < ApplicationRecord
  has_many :users
  has_many :teams
  has_many :participations
end

class User < ApplicationRecord
  belongs_to :company
  has_many :participations
  has_many :teams, through: :participations
end

class Team < ApplicationRecord
  belongs_to :company
  has_many :participations
  has_many :users, through: :participations
end

class Participation < ApplicationRecord
  belongs_to :company
  belongs_to :user
  belongs_to :team
end

Мои окружения.

$ ruby -v
ruby 2.4.5p335 (2018-10-18 revision 65137) [x86_64-darwin17]
$ rails -v
Rails 5.0.7.1

Я пробовал это.Но возникла ошибка.

u = User.create(
  company: Company.create,
  teams: [
    Team.create(company: Company.create)
  ]
)
irb(main):021:0* u.errors
=> #<ActiveModel::Errors:0x00007faf7f5668b0 @base=#<User id: nil, company_id: 25, name: nil, created_at: nil, updated_at: nil>, @messages={:participations=>["is invalid"]}, @details={:participations=>[{:error=>:invalid}]}>
irb(main):022:0> u.participations
=> #<ActiveRecord::Associations::CollectionProxy [#<Participation id: nil, company_id: nil, user_id: nil, team_id: 15, created_at: nil, updated_at: nil>]>

Могу ли я создать какую-нибудь запись по ONE LINE ??или не может ??

1 Ответ

0 голосов
/ 13 февраля 2019

Вы не можете сделать это в одной строке.Вы пытаетесь создать экземпляр и передать весь объект Company, для которого требуется только идентификатор.Кроме того, нет способа прикрепить идентификатор_пользователя к этой компании, поскольку пользователь еще не создан.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...