Rails пытается построить вложенные модели, но получает откат - PullRequest
0 голосов
/ 24 октября 2018

Я не уверен, почему это происходит, но я пытаюсь создать вложенные атрибуты с Company и URLs моделями.

Вот что у меня есть:

# app/models/company.rb
class Company < ApplicationRecord
    has_many :urls, dependent: :destroy
end

.

# app/models/url.rb
class Url < ApplicationRecord
  belongs_to :Company
end

.

и так, например, у меня есть это:

urls = [{:url=>"http://audit.site.com/"},
 {:url=>"http://bidboard.site.com/"},
 {:url=>"http://careers.sit.com/"}]

, и я пытаюсь создать новую компанию с этими URL-адресами, связанными свыполните следующие действия:

company = Company.new(company_name: @report_data[:company_name], domain: @report_data[:domain])
company.urls.build(urls)
company.save

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

Мои миграционные записи должны быть в порядке, насколько я понимаю.Вот они:

class CreateCompanies < ActiveRecord::Migration[5.1]
  def change
    create_table :companies do |t|
      t.string :company_name
      t.string :domain

      t.timestamps
    end
  end
end

и

class CreateUrls < ActiveRecord::Migration[5.1]
  def change
    create_table :urls do |t|
      t.belongs_to :company, foreign_key: true
      t.string :url

      t.timestamps
    end
  end
end

Есть идеи, что я здесь не так делаю?

РЕДАКТИРОВАТЬ

Так что после звонка company.errors вот что я вижу:

 @base=#<Company:0x00007f71800f0e80 id: nil, company_name: "Random", domain: "random.com", created_at: nil, updated_at: nil>,
 @details=
  {:urls=>
    [{:error=>:invalid},
     {:error=>:invalid},
     {:error=>:invalid},
     {:error=>:invalid},
     {:error=>:invalid},
     {:error=>:invalid},
     {:error=>:invalid},
     {:error=>:invalid},
     {:error=>:invalid},
     {:error=>:invalid},
     {:error=>:invalid},
     {:error=>:invalid},
     {:error=>:invalid},
     {:error=>:invalid},
     ...

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Вам нужно использовать inverse_of при использовании вложенных атрибутов

В основном ваши ассоциации будут выглядеть следующим образом:

class Company < ApplicationRecord
    has_many :urls, dependent: :destroy, inverse_of: :company
end

class Url < ApplicationRecord
    belongs_to :company, inverse_of: :urls
end

Пройдите по этой ссылке , чтобы лучше понять

Также я бы предложил вам использовать save!, чтобы понять, почему что-то не получается.

0 голосов
/ 25 октября 2018

Пожалуйста, опубликуйте журналы вашего сервера, убедитесь, что вы:

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