Вставка предварительно определенных данных в другую таблицу при создании записи - PullRequest
0 голосов
/ 12 сентября 2018

Привет, настоящий Рэйлис Рукки. Я пытаюсь написать базовую систему mgmt для клиентов, и когда я создаю нового клиента (таблицу клиентов), мне нужно также создать 10 вложенных записей в другой таблице (customer_ownership) с определенной заранее определенной информацией, которая затем будет обновляться / изменяться, когда мы поговорить с клиентом.

Я действительно борюсь с этим, пытаюсь ли я вызвать контроллер создания sub_record из контроллера создания клиента или я пишу новое действие контроллера в Контроллере клиента.

Заранее спасибо

1 Ответ

0 голосов
/ 12 сентября 2018

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

Или используйте шаблон проектирования сервисных объектов для выполнения всех действий.

Или вы можете просто добавить код для выполнения задачи после создания в качестве метода и вызвать метод напрямую, а не вызывать его с помощью обратного вызова.

Или эта функциональность может существовать на модели. Все эти варианты можно рассматривать как «путь Rails» в зависимости от того, с кем вы разговариваете.

Мой предпочтительный метод будет ...

В controllers/my_object_contoller.rb

def create
  @object = MyObject.create(my_object_params)
  my_private_method
end

private

def my_private_method
   # create auxiliary data objects here 
end

Также посмотрите на Ассоциации ActiveRecord

Поскольку существуют способы создания двух моделей данных, которые программно связаны или связаны друг с другом с использованием идентификаторов foreign_key для столбцов БД.

Rails предлагает вам отличный API, который я привел в руководстве по рельсам выше.

Такая реализация с использованием активных ассоциаций записей может выглядеть следующим образом ...

# 'app/models/user.rb    

class User < ActiveRecord::Base
  has_one :address
  ...
end

# 'app/models/address.rb'

class Address < ActiveRecord::Base
  belongs_to :user
  ...
end

# 'db/migrate/<timestamp>_create_users.rb'

class CreateUsers < ActiveRecord::Migration[5.2]
  def change
    create_table :users do |t|
      t.string     :email
      t.string     :first_name
      t.string     :last_name

      t.timestamps
    end
  end
end

# 'db/migrate/<timestamp>_create_addresses.rb'

class CreateAddresses < ActiveRecord::Migration[5.2]
  def change
    create_table :addresses do |t|
      t.references :user,         null: false, foreign_key: true
      t.string     :house_number, null: false
      t.string     :streen_name
      t.string     :city
      t.string     :state
      t.string     :zip_code

      t.timestamps
    end
  end
end

Это дает нам новый способ манипулирования нашими данными. Если мы создаем нового пользователя и дополнительные данные, которые мы хотим добавить, это адрес пользователя. Затем мы можем просто собрать все эти данные в форме и затем использовать методы, которые дает нам помощник has_one. Например ...

def create
  @user         = User.new(params[:user])
  @address      = Address.new(params[:address])
  @user.address = @address
  @user.save
end

Конечно, это весь псевдокод, поэтому вам действительно стоит погрузиться в активную ссылку на запись, которую я разместил выше

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